PHP提供的十六进制值与在线工具不同

PHP提供的十六进制值与在线工具不同,php,steam,Php,Steam,我正在通过一个API连接到Steam,并从中获取用于身份验证的SteamID 当我从API获取用户id时,它会给我76561198118533739,当我检查它时,正确的十六进制值就是结果(1100001096efa6b) 但是,当我使用PHP函数dechex时,它给了我错误的值。如何获得要使用的正确值 例如: <?php echo dechex(76561198118533739); // 7fffffff ?> 这种差异是因为您的php平台使用32位,但您测试的数字需要64位

我正在通过一个API连接到Steam,并从中获取用于身份验证的SteamID

当我从API获取用户id时,它会给我76561198118533739,当我检查它时,正确的十六进制值就是结果(1100001096efa6b)

但是,当我使用PHP函数dechex时,它给了我错误的值。如何获得要使用的正确值

例如:

<?php
echo dechex(76561198118533739); // 7fffffff
?>


这种差异是因为您的php平台使用32位,但您测试的数字需要64位长()-二进制在线计算器给出正确答案。您可以使用
echo PHP\u INT\u SIZE*8检查您有多少“位”

PHP对此函数没有错误报告,它应该为整数溢出给出错误,但没有这样的运气。。7FFFFF是最大的有符号32位整数,它与此函数在32位平台上得到的值一样接近。要在32位系统上正确地将该数字转换为十六进制,请使用任意精度库(如bcmath或GMP)来计算十六进制值,以下是“joost at bingopaleis.com”在评论中发布的其中一个值

  • 它需要bcmath扩展才能工作
还要记住,该数字太大,无法在32位系统上存储为数字,因此需要将其存储为字符串

dec2hex("76561198118533739"); // "1100001096efa6b"

如果bcmath不可用,也许是时候将您的服务器升级到64位了?

是否有内置PHP函数可以获得与在线工具相同的答案?我不知道,但您可以使用
echo PHP\u INT\u SIZE(4=32位,8=64位)结果是4try
echo PHP\u INT\u SIZE*8@hanshenrik我用你的好主意更新了我的答案:)谢谢@hanshenrik-作为一个魅力!:)
dec2hex("76561198118533739"); // "1100001096efa6b"