C ++
unsigned int hash_djb2(char *str, unsigned int str_size)
{
unsigned int hash = 5381;
for(unsigned int c = 0; c < str_size; c++)
hash = ((hash << 5) + hash) + str[c];
return (hash & 0xFFFFFFFF);
}
int main()
{
string term = "one piece";
char* data = const_cast<char*>(term.c_str());
printf("%u", hash_djb2(data, term.size()));//2850035213
}
PHP
<?php
function hash_djb2($str)
{
$hash = 5381;
$length = strlen($str);
for($i = 0; $i < $length; $i++) {
$hash = ( ($hash << 5) + $hash ) + $str[$i];
}
return ($hash & 0xFFFFFFFF);
}
echo hash_djb2("one piece");//-233010523
?>
PHPがC ++と同じ結果を返すようにするにはどうすればよいですか?
str[c]
PHPでそれに加えては、解析しようとするため、問題となっている
数、すなわちなどの文字列の内容を。「123」=> 123および「O」、「n」などは単純に0になります。ASCII値を取得するために
使用ord(str[c])
します。
さらに、intキャストなど&0xFFFFFFFF
はおそらく良い考え
です。そうでない場合、PHPはより大きな値でdoubleに切り替えることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加