Javascript 为什么在PHP中使用intval和hexdec内置函数时十六进制到十进制字符串输出不同?

Javascript 为什么在PHP中使用intval和hexdec内置函数时十六进制到十进制字符串输出不同?,javascript,php,hex,Javascript,Php,Hex,我使用两种方法将十六进制字符串转换为十进制。使用intval函数,其中我传递16 base作为第二个参数,以转换十进制的十六进制字符串。我正在使用hexdec内置函数做同样的事情。两人的回答都不一样 我可以知道这两个函数输出的原因吗 $a = 'efdebd76'; echo 'intvar : '. intval($a,16); echo '<br/>'; echo 'hexdec : '.hexdec($a); $a='efdebd76'; 回显“intvar:”。因特瓦尔(a

我使用两种方法将十六进制字符串转换为十进制。使用intval函数,其中我传递16 base作为第二个参数,以转换十进制的十六进制字符串。我正在使用hexdec内置函数做同样的事情。两人的回答都不一样

我可以知道这两个函数输出的原因吗

$a = 'efdebd76';
echo 'intvar : '. intval($a,16);
echo '<br/>';
echo 'hexdec : '.hexdec($a);
$a='efdebd76';
回显“intvar:”。因特瓦尔(a,16美元);
回声“
”; 回声“hexdec:”。hexdec($a);
输出

内部变量:2147483647

hexdec:4024352118

关于“intval”函数的php手册:

返回值: 最大值取决于系统。32位系统的最大有符号整数范围为-2147483648到2147483647。例如,在这样一个系统上,intval('1000000000000')将返回2147483647。64位系统的最大有符号整数值为9223372036854775807

我猜您在32位系统上运行intval是因为它返回值2147483647,并且0xefdebd76的值大于最大整数值。
在十六进制字符串中,它似乎不受执行此函数的系统的限制。

我在64位系统中进行了测试,得到了这个问题。是的,我打印PHP版本架构32位,得到2147483647,但在64位测试时,得到了实际值4024352118。所以你是正确的,谢谢你解决了这个问题。你可以添加你的php版本吗?如果是32位版本还是64位版本?还有操作系统版本和cpu?