PHP:为什么dechex即使使用较小的数字也会失败?
我在使用bindec和dechex函数将二进制字符串转换为十六进制字符串时遇到问题。在我的研究中,我发现无论是PHP还是dechex,其整数大小限制都是319259235818。但是,即使应用程序中可能的最大整数比实际值小一个数量级,我的代码也会失败PHP:为什么dechex即使使用较小的数字也会失败?,php,binary,hex,Php,Binary,Hex,我在使用bindec和dechex函数将二进制字符串转换为十六进制字符串时遇到问题。在我的研究中,我发现无论是PHP还是dechex,其整数大小限制都是319259235818。但是,即使应用程序中可能的最大整数比实际值小一个数量级,我的代码也会失败 $bin = "11111111111111111111111111111111111"; var_dump($bin); //'11111111111111111111111111111111111' (length=35) $dec = bi
$bin = "11111111111111111111111111111111111";
var_dump($bin); //'11111111111111111111111111111111111' (length=35)
$dec = bindec($bin);
var_dump($dec); // float 34359738367
$hex = dechex($dec);
var_dump($hex); // 'ffffffff' (length=8) (binaryhexconverter.com shows 7FFFFFFFF (length 9) as the result)
$dec2 = hexdec($hex);
var_dump($dec2); //float 4294967295
$bin2 = decbin(hexdec($hex));
var_dump($bin2); //'11111111111111111111111111111111' (length=32)
发生了什么事?这句话在
可以转换的最大数字是PHP\u INT\u MAX*2+1
(或
-1) :在32位平台上,这将是十进制的4294967295
,
这导致dechex()
返回ffffffff
很明显,您使用的是32位平台,在您的情况下,它是一个浮点
,而不是整数
:
该函数可以转换太大而无法放入
平台整数类型,较大的值作为浮点值返回
案例
问题是,
bindec
确实“足够聪明”可以进行这样的转换,dechex
不会这样做-它只适用于整数
值。感谢您的快速响应。与其环顾网络,我应该从文档开始。