我在php和javascript上有一个函数djb2
,
PHP
function hash_djb2($str){
$hash = 5381;
$length = strlen($str);
for($i = 0; $i < $length; $i++) {
$hash = (($hash << 5) + $hash) + $str[$i];
}
return $hash;
}
和javascript
djb2Code = function(str){
var hash = 5381;
for (i = 0; i < str.length; i++) {
char = str.charCodeAt(i);
hash = ((hash << 5) + hash) + char; /* hash * 33 + c */
}
return hash;
}
在php上我打电话
hash_djb2("123456789egrdhfdtjdtjdtjrt");
,输出
-4235984878
并在javascript中调用
djb2Code("123456789egrdhfdtjdtjdtjrt");
,输出
27338942
为什么会这样,我该如何解决?
谢谢
答案 0 :(得分:1)
这些功能不同。您的PHP使用$str[$i]
,这是字符。您的JavaScript函数使用char.charCodeAt(i)
返回整数。
像这样更改你的PHP函数......
function hash_djb2($str){
$hash = 5381;
$length = strlen($str);
for($i = 0; $i < $length; $i++) {
$char = ord($str[$i]); // this line is added
$hash = (($hash << 5) + $hash) + $char; // this line is modified
}
return $hash;
}
答案 1 :(得分:0)
你必须在php代码中使用ord
hash = (($hash << 5) + $hash) + ord($str[$i]);