我的网络主机报告PHP_INT_MAX是2147483647,即它是32位环境。我试图转换当前在64位环境中运行的几个数学运算,以便它们也可以在32位环境中运行。翻译几个> 32位操作以在php 32位环境中工作
$id = '76561197996545192';
$temp = '';
for ($i = 0; $i < 8; $i++)
{
$temp .= chr($id & 0xFF);
$id >>= 8;
}
$result= md5('BE' . $temp);
echo $result;
上面收率de46c6d30bfa6e097fca82f63c2f4f4c
在32位的环境,但它实际上应该得到cd97cc68c1038b485b081ba2aa3ea6fa
(它目前确实在64位的环境)。我猜测bitshift操作符导致了不匹配,但我不确定(我不是一个php专家,也不是数学家,而且我也不是原始代码的作者:)
BCMath安装在32位环境中,并且可能还安装了其他框架(如果需要,我可以检查phpinfo)。
我该如何解决这个问题?可能吗?
//莱纳斯
编辑:是的,我知道代码看起来怪异,但它的工作完全按照预期在64位环境。
你可能是对的,我需要仔细检查一下。现在的问题是如何将$ id声明为“更大”的int,而实际上没有这样的数据类型。 BCMath可以用于那个吗? – 2014-11-03 15:09:35