使用二进制值1111
,它应该产生F
.
但是使用以下代码,它会产生其他结果:
$answer = bin2hex('1111');
// $answer is 31313131
如何正确获得所需的十六进制表示?
使用二进制值1111
,它应该产生F
.
但是使用以下代码,它会产生其他结果:
$answer = bin2hex('1111');
// $answer is 31313131
如何正确获得所需的十六进制表示?
要获得所需的 HEX 表示,我们可以使用以下代码:
$binary = '1111';
$answer = strtoupper(dechex(bindec($binary)));
echo $answer; // which produces "F"
说明:该函数bin2hex()
用于将二进制数据转换为十六进制字符串表示,但不用于将表示二进制数字的字符串转换为十六进制。这就是为什么我们需要结合bindec()
和dechex()
。
注意:strtoupper()
是可选的。
替代解决方案:
PHP 提供了一种更简洁的方法来转换数字基数:
$answer = base_convert($binary, 2, 16);
但是,此函数可能会丢失精度。有关更多信息,请参阅文档。
您还可以使用printf()函数来获得所需的十六进制表示:
printf('%x', bindec('1111')); # f (lowercased)
printf('%X', bindec('1111')); # F (uppercased)