0

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

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

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

如何正确获得所需的十六进制表示?

4

2 回答 2

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);

但是,此函数可能会丢失精度。有关更多信息,请参阅文档

于 2013-11-08T04:40:28.000 回答
1

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

printf('%x', bindec('1111')); # f (lowercased)
printf('%X', bindec('1111')); # F (uppercased)
于 2013-11-08T04:53:13.627 回答