2013-03-25 45 views
1

我對腳本語言的「棋子」這一功能:Hash函數沒有給予同樣的結果

stock hash(Hash[]) 
{ 
    new 
     hStr1 = 1, hStr2 = 0; 

    for(new i = 0, l = strlen(Hash); i < l; i ++) 
    { 
     hStr1 = (hStr1 + Hash[i]) % 65521; 
     hStr2 = (hStr2 + hStr1) % 65521; 
    } 
    return (hStr2 << 16) + hStr1; 
} 

這將輸出:

printf("%d", hash("Test")); = 64815521返回它作爲一個整數

這是PHP函數:

function hashEX($Hash) 
{ 
    $hStr1 = 1; $hStr2 = 0; 

    for($i = 0, $l = strlen($Hash); $i < $l; $i ++) 
    { 
     $hStr1 = ($hStr1 + $Hash[$i]) % 65521; 
     $hStr2 = ($hStr2 + $hStr1) % 65521; 
    } 
    return ($hStr2 << 16) + $hStr1; 
} 

這給我:

echo intval(hashEX("Test")); = 262145

echo hashEX("Test"); = 262145

任何人都知道這是爲什麼,以及如何解決它?爲了說清楚,我想獲得與PHP函數中的PAWN函數相同的值。

+0

的PHP不應該工作,因爲有一個內部的hash()函數。 – 2013-03-25 21:08:03

+0

啊!對不起,我只是重命名它以匹配PAWN。 – user1667191 2013-03-25 21:08:51

+0

$ hStr1 + $ Hash [$ i]這爲一封信添加了一個數字,PAWN如何處理這個問題? – 2013-03-25 21:16:14

回答

0

發現我的答案是:

function hashEX($Hash) 
{ 
    $hStr1 = 1; $hStr2 = 0; 

    for($i = 0, $l = strlen($Hash); $i < $l; $i ++) 
    { 
     $hStr1 = ($hStr1 + ord($Hash[$i])) % 65521;   
     $hStr2 = ($hStr2 + $hStr1) % 65521; 
    } 
    return ($hStr2 << 16) + $hStr1; 
} 
相關問題