主页/PHP笔记/PHP问答/数字与字符串/PHP:如何将数字转换为十六进制以及反之

PHP:如何将数字转换为十六进制以及反之

小赵码狮

小赵码狮

好的,下面是如何将数字转换为十六进制和从十六进制转换回数字的详细步骤。

将数字转换为十六进制

  1. 使用内置函数 dechex()

    • dechex() 函数接受一个整数作为参数,并返回该整数的十六进制表示。
      $decimalNumber = 255;
      $hexadecimal = dechex($decimalNumber);
      echo "Decimal: {$decimalNumber}, Hexadecimal: {$hexadecimal}"; // 输出: Decimal: 255, Hexadecimal: ff
  2. 手动计算(适用于小范围的数值):

    • 如果需要更复杂的转换,可以手动计算。
      $decimalNumber = 255;
      $hexadecimal = '';
      for ($i = 7; $i >= 0; $i--) {
      $remainder = $decimalNumber % 16;
      if ($remainder < 10) {
         $hexadecimal .= $remainder;
      } else {
         $hexadecimal .= chr(55 + $remainder); // 'A' -> 10, 'B' -> 11, ..., 'F' -> 15
      }
      $decimalNumber = intdiv($decimalNumber, 16);
      }
      echo "Hexadecimal: {$hexadecimal}"; // 输出: Hexadecimal: ff

将十六进制转换为数字

  1. 使用内置函数 hexdec()

    • hexdec() 函数接受一个十六进制字符串作为参数,并返回该字符串对应的十进制值。
      $hexadecimal = 'ff';
      $decimalNumber = hexdec($hexadecimal);
      echo "Hexadecimal: {$hexadecimal}, Decimal: {$decimalNumber}"; // 输出: Hexadecimal: ff, Decimal: 255
  2. 手动计算(适用于小范围的数值):

    • 如果需要更复杂的转换,可以手动计算。
      $hexadecimal = 'ff';
      $decimalNumber = 0;
      for ($i = 0; $i < strlen($hexadecimal); $i++) {
      if ($hexadecimal[$i] >= '0' && $hexadecimal[$i] <= '9') {
         $decimalNumber = $decimalNumber * 16 + (int)$hexadecimal[$i];
      } elseif ($hexadecimal[$i] >= 'A' && $hexadecimal[$i] <= 'F') {
         $decimalNumber = $decimalNumber * 16 + (int)$hexadecimal[$i] - 55;
      }
      }
      echo "Hexadecimal: {$hexadecimal}, Decimal: {$decimalNumber}"; // 输出: Hexadecimal: ff, Decimal: 255

这些方法可以帮助你在 PHP 中轻松地进行数字到十六进制和十六进制到数字的转换。希望这对你有帮助!

小马讲师

小马讲师

概述

在本教程中,我们将探讨如何使用PHP将数字转换为十六进制表示法以及反过来。这将填补人类可读的数字与机器友好的表示之间的基本鸿沟。

理解十六进制表示法和转换技巧对于各种计算环境,如网页设计、颜色参考以及低级数据处理来说非常宝贵。本指南提供了一种详细的PHP方法来执行从数字到十六进制的转换,包括逐步深入的例子。

在PHP中,可以使用内置函数bin2hex()将数字转换为十六进制表示形式。例如: $number = 16; echo bin2hex($number); // 输出: “10” 这将会输出一个字符串,其中每个字符代表十进制数的一个位。在这个例子中,十六进制的”10″对应于十进制的16。 如果你想获取数字的十六进制值,你可以先将其转换为二进制字符串,然后用substr()函数提取出对应的十六进制部分。例如: $number = 16; $binary = decbin($number); echo substr($binary, -4); // 输出: “10” 这段代码首先将十进制数16转换为二进制字符串,然后通过取反向索引的方式(-4)来提取出十六进制的前四位,即”10″。

PHP 提供了原生函数用于将数值转换为十六进制格式。使用dechex()该函数接收一个整数作为输入,并返回表示该整数值的十六进制字符串:

$number = 255;
$hex = dechex($number);
echo $hex; // Outputs: 'ff'

对于转换正整数来说,这非常有效,但如果需要处理负数或更大的整数怎么办?

处理更大的和负数的数字

对于超过32位整数最大值的大整数,PHP的dechex()可能不会达到预期的结果:

$largeNumber = 4294967295;
$hexLarge = dechex($largeNumber);
echo $hexLarge; // Outputs: 'ffffffff'

负整数需要一些额外的逻辑,因为它们在大多数系统上是两补码:

$negative = -255;
$hexNegative = dechex($negative);
echo $hexNegative; // PHP Warning:  dechex() expects parameter 1 to be positive

我们将稍后在“高级技术”部分处理这种情况。

将十六进制转换为数字。

反向过程,即从十六进制字符串转换回十进制整数,使用以下公式:int(decimal) = int(hexadecimal, 16)hexdec()PHP 函数:

$hex = 'ff';
$number = hexdec($hex);
echo $number; // Outputs: 255

处理较大长度的十六进制字符串,如果转换后的数值超出了PHP的整数范围,则会返回一个浮点值:

$hexLarge = '1ffffffff';
$numberLarge = hexdec($hexLarge);
echo $numberLarge; // Outputs a float since it exceeds PHP's integer range

中级技术

如果你需要确保你的十六进制字符串始终有特定数量的字符,例如为RGB颜色添加前导零,那么sprintf()函数非常有用:

$number = 255;
$hex = sprintf("%02x", $number);
echo $hex; // Outputs: 'ff'

在情境下,我们可能还需要将十六进制字符串表示为大写形式。这需要做一点调整:

echo strtoupper($hex); // Outputs: 'FF'

高级技术

在处理负数或超过32位的数字时,你需要规避PHP内置函数的限制:

$number = -255;
$result = unpack("H*", pack("l", $number));
$hexNegative = $result[1];
echo $hexNegative; // Outputs a valid hex string

对于无符号长整型表示:

$number = 4294967295;
$hex = sprintf('%08x', $number);
echo $hex; // Outputs: 'ffffffff'

需要注意的是,这些技术可能需要根据系统架构进行额外的转换。

十六进制算术和位操作

在进行数学运算和算法时,将十六进制值整合到其中需要对位操作有更深入的理解。PHP 提供了多个用于此目的的操作符:&按位与操作(Bitwise AND)|按位或(Bitwise OR)^(按位异或),和~按位非。

$firstHex = 0x1A;
$secondHex = 0x0F;
$result = $firstHex & $secondHex;
echo dechex($result);  // Outputs: 'a'

结论。

通过我们已经探讨的概念和示例,你应该能够处理各种PHP中的十六进制转换任务。大多数情况下,可以通过内置函数解决,但理解十六进制表示的底层原理将使你在遇到复杂问题时更有能力去解决它们。