2014-11-03 43 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

相關問題