1

私はスクリプト言語「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 関数と同じ値を取得したいと考えています。

4

1 に答える 1

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;
}
于 2013-03-25T21:20:34.640 に答える