PHP 给出与在线工具不同的十六进制值
PHP gives different hex value than an online tool
我正在通过 API 连接到 Steam,并从中获取 SteamID 以进行身份验证。
当我从 API 得到我的 user_id 时,它给我 76561198118533739,当我在 https://www.binaryhexconverter.com/decimal-to-hex-converter 上检查它时,正确的十六进制值是结果 (1100001096efa6b)。
但是,当我使用 PHP 函数 dechex 时,它给出了错误的值。我怎样才能得到正确的值来使用?
示例:
<?php
echo dechex(76561198118533739); // 7fffffff
?>
这个差异是因为您的 php 平台使用 32 位,但您测试的数字需要 64 位长 (http://php.net/manual/en/function.dechex.php) - 二进制在线计算器给出正确答案。您可以使用 echo PHP_INT_SIZE*8;
查看您有多少 "bit"
PHP这个函数没有报错,应该是整数溢出报错,可惜没有。7fffffff是最大的有符号32位整数,和这个差不多函数将在 32 位平台上运行。要在 32 位系统上将此数字正确转换为十六进制,请使用 bcmath 或 GMP 等任意精度库来计算十六进制值,这是 "joost at bingopaleis dot com"
在评论中发布的其中 1 个
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;
}
- 它需要 bcmath 扩展才能工作。
另外请记住,数字太大无法在 32 位系统上存储为数字,因此您需要将其存储为字符串。
dec2hex("76561198118533739"); // "1100001096efa6b"
如果 bcmath 不可用,也许是时候将您的服务器升级到 64 位了?
我正在通过 API 连接到 Steam,并从中获取 SteamID 以进行身份验证。
当我从 API 得到我的 user_id 时,它给我 76561198118533739,当我在 https://www.binaryhexconverter.com/decimal-to-hex-converter 上检查它时,正确的十六进制值是结果 (1100001096efa6b)。
但是,当我使用 PHP 函数 dechex 时,它给出了错误的值。我怎样才能得到正确的值来使用?
示例:
<?php
echo dechex(76561198118533739); // 7fffffff
?>
这个差异是因为您的 php 平台使用 32 位,但您测试的数字需要 64 位长 (http://php.net/manual/en/function.dechex.php) - 二进制在线计算器给出正确答案。您可以使用 echo PHP_INT_SIZE*8;
PHP这个函数没有报错,应该是整数溢出报错,可惜没有。7fffffff是最大的有符号32位整数,和这个差不多函数将在 32 位平台上运行。要在 32 位系统上将此数字正确转换为十六进制,请使用 bcmath 或 GMP 等任意精度库来计算十六进制值,这是 "joost at bingopaleis dot com"
在评论中发布的其中 1 个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;
}
- 它需要 bcmath 扩展才能工作。
另外请记住,数字太大无法在 32 位系统上存储为数字,因此您需要将其存储为字符串。
dec2hex("76561198118533739"); // "1100001096efa6b"
如果 bcmath 不可用,也许是时候将您的服务器升级到 64 位了?