2014-11-03 46 views
1

我的网络主机报告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位环境。

回答

1

在我看来,由于$ id是一个字符串,按位操作并没有真正做到您希望他们做的事。我知道它不能是一个整数,因为它对于32位系统来说太大了。也许你想要做的是处理$ id的最后3个字符,并把它们变成一个整数?这将是代码为:

$id = '76561197996545192'; 
$temp = ''; 
for ($i = 0; $i < 8; $i++) { 
    $tnbr = intval(substr($id, -3)); 
    $char = chr($tnbr & 0xFF); // Is the bitwise to make them valid chars? Maybe skip that part? 
    $temp .= $char; 
    $id = substr($id, 0, strlen($id) - 3); 
} 

$result = md5('BE' . $temp); 
echo $result; 

这使我的98b0f4cc942bfe4a22dd7877ae3e9f06结果。

我不知道这个数学算法的目的是什么,但也许我不需要:)

祝你好运! /Wille

+0

你可能是对的,我需要仔细检查一下。现在的问题是如何将$ id声明为“更大”的int,而实际上没有这样的数据类型。 BCMath可以用于那个吗? – 2014-11-03 15:09:35

相关问题