在32位PHP安装上将64位整数转换为32位?

时间:2014-03-04 13:30:14

标签: php 32bit-64bit

我正在建立一个需要使用Steam API的网站。但是我在PHP中将64位整数转换为32位时遇到问题。

我看到另一篇帖子,回答here,引导我使用此代码:

$y = 76561197998705985;

$x = $y & 0xffffffff;

echo $x;

但是,因为我使用的xampp只有32位安装,所以我得到的结果不正确1(38440256而不是38440257)。

我上面链接的另一篇文章提到使用PHP GMP扩展来转换32位安装,但是通过官方文档here,我认为对于这类事情的新手没有任何有用的指导

非常感谢一些澄清/帮助!

2 个答案:

答案 0 :(得分:1)

您是否尝试过示例代码?

$and = gmp_and("0xffffffff", "76561197998705985");
echo gmp_strval($and) . "\n";

#Convert back to int
$asInt = gmp_intval($and);

答案 1 :(得分:0)

我怀疑这是一个浮点舍入问题,一旦数字超过PHP_INT_MAX,它将无声地转换为浮点并因此失去精度,请参阅64位PHP上的示例:

php> PHP_INT_MAX
int(9223372036854775807)
php> 9223372036854775807
int(9223372036854775807)
php> 9223372036854775807 + 1
double(9.2233720368548E+18)

您必须将您的号码存储为字符串以避免此问题。