0

我正在尝试编写一个 PHP RGB 到 HEX 转换器,并且我正在尝试使用一个函数将 RGB 数字转换为字母,如果它们在 10 到 15 之间(不,我不能使用“十进制( )“ 功能)。这就是我现在编码的方式:

function convToHex(&$hexInt)
{
    switch($hexInt){
        case 10:
            $hexInt = "A";
            break;
    }
}

//create six hexadecimal variables for "hexMain"

$hex1 = intval($r / 16);
$hex2 = $r % 16;
$hex3 = intval($g / 16);
$hex4 = $g % 16;
$hex5 = intval($b / 16);
$hex6 = $b % 16;

$rgb = "#" . $r . $g . $b;

echo convToHex($hex1);

问题是,当我尝试回显它时,该值仅显示为 0。在不使用“dechex()”的情况下转换“$hex1”、“$hex2”等的最佳方法是什么?

4

2 回答 2

1

您的问题出在这一行:

echo convToHex($hex1);

如果你想通过引用传递,那么你需要调用函数来改变变量,然后回显它(因为函数不会返回它改变的值),例如

convToHex($hex1);
echo $hex1;

...另外,有任何理由不使用类似的东西:

function rgb2hex($r, $g, $b) {
  return sprintf("#%02X%02X%02X", $r, $g, $b);
}

或者,如果您想要更接近原始逻辑的东西:

function rgb2hex($r, $g, $b) {
  // takes ints $r, $g, $b in the range 0-255 and returns a hex color string
  $hex_digits = "0123456789ABCDEF";
  $hex_string = "";

  $hex_string .= substr($hex_digits, $r / 16, 1);
  $hex_string .= substr($hex_digits, $r % 16, 1);
  $hex_string .= substr($hex_digits, $g / 16, 1);
  $hex_string .= substr($hex_digits, $g % 16, 1);
  $hex_string .= substr($hex_digits, $b / 16, 1);
  $hex_string .= substr($hex_digits, $b % 16, 1);

  return "#" . $hex_string;
}

使用其中任何一个都将涉及以下内容:

$r = 12;
$g = 234;
$b = 45;

$hex_string = rgb2hex($r, $g, $b);
echo $hex_string . "\n";
于 2012-04-15T00:23:39.940 回答
1

您需要在函数中返回值(在本例中为 $hexInt)。然后,无需使用参考。

function convToHex($hexInt) {
    // do things
    return $hexInt;
}

echo convToHex($hexInt);
于 2012-04-15T00:14:39.433 回答