如何将字节数组转换为十六进制字符串?

6

我有一个解决方案,但这个方案比较慢。 例如:

$arr = array(14, 0, 1, 0, 0, 0, 0, 0, 0, 224, 0, 255, 255, 255, 255, 255);
$hex_str = "";
foreach ($arr as $byte)
{
    $hex_str .= sprintf("%02X", $byte);
}

结果是:0E0001000000000000E000FFFFFFFFFF

格式如下:

255 => FF
0 => 00
1 => 01
14 => 0E

如果您知道更快的解决方案,请分享。

2
你的代码可以工作,但很简单。没有办法以一种比你已经花费的时间更省时的方式完成你所需的任务。 - Sammitch
1个回答

11

你可以先将每个整数转换为字符。

$chars = array_map("chr", $arr);

然后将其转换为字符串:

$bin = join($chars);

最后将其转换为十六进制字符串:

$hex = bin2hex($bin);

参见:array_mapchrjoinbin2hex。(当然,您也可以一行完成所有操作。)


1
很好的逐步解决方案,带有参考资料 :)!(如果OP确实想要大写字母,那么只需使用strtoupper函数) - Rizier123
1
我也怀疑它在任何方面都“更快”。(也许只是读取速度更快。) - mario
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Rizier123
1
我想这只是那些微小优化问题中的一个。 - mario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接