我正在通过API连接到Steam并从中获取SteamID以进行身份验证.
当我从API让我USER_ID它给了我76561198118533739,当我检查它https://www.binaryhexconverter.com/decimal-to-hex-converter,正确的十六进制值是结果(1100001096efa6b).
但是,当我使用PHP函数dechex时,它给了我错误的值.如何获得正确的值?
例:
<?php
echo dechex(76561198118533739); // 7fffffff
?>
Run Code Online (Sandbox Code Playgroud)
PHP没有这个函数的错误报告,它应该给整数溢出一个错误,但没有这样的运气.. 7fffffff是最大的有符号32位整数,这个函数将在32位平台上得到.要在32位系统上正确地将此数字转换为十六进制,请使用像bcmath或GMP这样的任意精度库来计算十六进制值,这里是"joost at bingopaleis dot com"评论中发布的一个.
function dec2hex($number)
{
$hexvalues = array('0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F');
$hexval = '';
while($number != '0')
{
$hexval = $hexvalues[bcmod($number,'16')].$hexval;
$number = bcdiv($number,'16',0);
}
return $hexval;
}
Run Code Online (Sandbox Code Playgroud)
还要记住,该数字太大,无法在32位系统上存储为数字,因此您需要将其存储为字符串.
dec2hex("76561198118533739"); // "1100001096efa6b"
Run Code Online (Sandbox Code Playgroud)
如果bcmath不可用,也许是时候将服务器升级到64位了?