PHP:为什么dechex即使使用较小的数字也会失败?

PHP:为什么dechex即使使用较小的数字也会失败?,php,binary,hex,Php,Binary,Hex,我在使用bindec和dechex函数将二进制字符串转换为十六进制字符串时遇到问题。在我的研究中,我发现无论是PHP还是dechex,其整数大小限制都是319259235818。但是,即使应用程序中可能的最大整数比实际值小一个数量级,我的代码也会失败 $bin = "11111111111111111111111111111111111"; var_dump($bin); //'11111111111111111111111111111111111' (length=35) $dec = bi

我在使用bindec和dechex函数将二进制字符串转换为十六进制字符串时遇到问题。在我的研究中,我发现无论是PHP还是dechex,其整数大小限制都是319259235818。但是,即使应用程序中可能的最大整数比实际值小一个数量级,我的代码也会失败

$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
不会这样做-它只适用于
整数
值。

感谢您的快速响应。与其环顾网络,我应该从文档开始。