来自2种不同语言的哈希函数没有给出相同的结果

时间:2013-03-25 21:00:39

标签: php hash pawn

我在脚本语言“PAWN”中有这个功能:

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函数相同的值。

1 个答案:

答案 0 :(得分: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;
}