在处理底层数据或网络编程时,我们经常会遇到二进制与十六进制之间的转换需求。幸运的是,PHP 提供了简洁易用的内建函数来帮助我们完成这一任务,最常用的就是 bindec() 和 base_convert()。
bindec() 是 PHP 的一个内建函数,它可以将二进制字符串转换为十进制数。而 dechex() 则可以将十进制数转换为十六进制字符串。结合这两个函数,我们就可以完成二进制到十六进制的转换。
在这个例子中,11010110 被转换成了十进制的 214,然后再转换成十六进制的 D6。
如果你觉得先转十进制再转十六进制太繁琐,PHP 的 base_convert() 提供了一种更加直接的方法。该函数允许我们直接指定源基数和目标基数,从而快速实现进制转换。
这个函数的第一个参数是要转换的字符串,第二个参数是原始进制(这里是 2),第三个参数是目标进制(这里是 16)。
传入的二进制字符串必须是合法的二进制数字(只包含 0 和 1),否则 bindec() 和 base_convert() 都可能返回意想不到的结果。
使用 base_convert() 时返回值是字符串类型,如果需要十六进制数在其他进制之间继续转换,应注意类型转换。
如果需要补齐位数,可以使用 str_pad() 函数。例如要始终输出 2 位十六进制数,可以这样写:
这种转换在处理网络数据包、颜色代码(如 RGB 值)、位图数据等场景下十分常见。比如,当你接收到一个二进制数据流时,想要将其以十六进制形式打印出来以便调试:
<code> $data = ['11000011', '10101010', '11110000']; foreach ($data as $binary) { echo strtoupper(base_convert($binary, 2, 16)) . " "; } // 输出: C3 AA F0 </code>你还可以将结果作为十六进制颜色输出,例如:
<code> $r = '11110000'; $g = '10101010'; $b = '11000011'; $hexColor = '#' . strtoupper(base_convert($r, 2, 16)) . strtoupper(base_convert($g, 2, 16)) . strtoupper(base_convert($b, 2, 16)); echo $hexColor; // 输出: #F0AAC3 </code>如果你从远程接口获取了一段二进制编码数据,比如:
<code> $response = file_get_contents('https://m66.net/api/data/binary'); $data = json_decode($response, true); // 假设返回的是 ['11001100', '11110000'] foreach ($data as $binary) { echo strtoupper(base_convert($binary, 2, 16)) . " "; } // 输出: CC F0 </code>通过结合 file_get_contents()、json_decode() 和 base_convert(),我们可以快速地将二进制数据转换成可读的十六进制格式进行处理和展示。