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

时间:2018-10-25 17:37:34

标签: php steam

我正在通过API连接Steam并从中获取SteamID以进行身份​​验证。

当我从API中获得user_id时,它会给我76561198118533739,并在https://www.binaryhexconverter.com/decimal-to-hex-converter上对其进行检查时,将得出正确的十六进制值(1100001096efa6b)。

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

示例:

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

2 个答案:

答案 0 :(得分:5)

PHP对此函数没有错误报告,应该为整数溢出给出一个错误,但是没有这种运气。7fffffff是最大的有符号32位整数,与32位平台上该函数所获得的值非常接近。要在32位系统上将此数字正确转换为十六进制,请使用bcmath或GMP之类的任意精度库来计算十六进制值,这是注释中的“由bingopaleis dot com主持”中的1

dec2hex("76561198118533739"); // "1100001096efa6b"
  • 它需要bcmath扩展名才能起作用。

还请记住,该数字太大,无法在32位系统上存储为数字,因此您需要将其存储为字符串。

SELECT db.name FROM master.sys.dm_hadr_database_replica_states rs
JOIN master.sys.databases db ON rs.database_id = db.database_id
WHERE is_local = 1 AND is_primary_replica = 1

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

答案 1 :(得分:2)

此差异是因为您的php平台使用32位,但是您测试的数字需要64位长(http://php.net/manual/en/function.dechex.php)-二进制在线计算器给出正确答案。您可以使用echo PHP_INT_SIZE*8;

检查有多少“位”