首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP提供与联机工具不同的十六进制值。

PHP提供与联机工具不同的十六进制值。
EN

Stack Overflow用户
提问于 2018-10-25 17:37:33
回答 2查看 342关注 0票数 2

我正在连接到一个API到蒸汽,并从它获得SteamID的认证目的。

当我从API获得我的user_id时,它给我76561198118533739,当我在https://www.binaryhexconverter.com/decimal-to-hex-converter上检查它时,正确的十六进制值是结果(1100001096efa6b)。

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

示例:

代码语言:javascript
复制
<?php
echo dechex(76561198118533739); // 7fffffff
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-25 17:45:19

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

代码语言:javascript
复制
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;
}
  • 它需要数学扩展才能工作。

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

代码语言:javascript
复制
dec2hex("76561198118533739"); // "1100001096efa6b"

如果没有数学,那么也许是时候将服务器升级到64位了?

票数 5
EN

Stack Overflow用户

发布于 2018-10-25 17:41:14

这种不同是因为您的php平台使用32位,但是您测试的numer需要64位长(http://php.net/manual/en/function.dechex.php) -二进制在线计算器给出了正确的答案。您可以使用echo PHP_INT_SIZE*8;检查有多少“位”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52995138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档