PHP中的bin2hex提供了错误的答案

时间:2013-11-08 04:40:28

标签: php

使用二进制值1111,它应该生成F

但是使用以下代码,它会产生其他结果:

$answer = bin2hex('1111');
// $answer is 31313131

如何正确获得所需的HEX表示?

2 个答案:

答案 0 :(得分:4)

要获得所需的HEX表示,我们可以使用以下代码:

$binary = '1111';
$answer = strtoupper(dechex(bindec($binary)));

echo $answer; // which produces "F"

说明:函数bin2hex()用于将二进制数据转换为十六进制字符串表示形式,但不用于将表示二进制数字的字符串转换为十六进制数字。这就是我们需要合并bindec()dechex()

的原因

注意:strtoupper()是可选的。


替代解决方案:

PHP提供了一种更简洁的方式来转换数字基础:

$answer = base_convert($binary, 2, 16);

但是,此功能可能会失去精确度。有关详细信息,请参阅documentation

答案 1 :(得分:1)

您还可以使用printf()函数来获取所需的十六进制表示:

printf('%x', bindec('1111')); # f (lowercased)
printf('%X', bindec('1111')); # F (uppercased)