我在javascript中有这个功能 - 工作正常
// javascript
function myhash(str) {
var hash = 0;
if (str.length == 0) return hash;
for (var i = 0; i < str.length; i++) {
oneChar = str.charCodeAt(i);
hash = ((hash << 5) - hash) + oneChar;
hash &= hash;
}
return hash;
}
而且我正在尝试将此函数重写为 PHP,但是对于相同的输入,输出与来自 JS 的输出不同。
// php
function myhash($str) {
$hash = 0;
if (strlen($str) == 0) return $hash;
for ($i = 0; $i < strlen($str); $i++) {
$oneChar = ord($str[$i]);
$hash = (($hash << 5) - $hash) + $oneChar;
$hash &= $hash;
}
return $hash;
}
输入和输出示例:
console.log(myhash("example")); // output: -1322970774
echo myhash("example"); // output: 93166309738
有谁知道,问题可能出在哪里?它们看起来一样,但显然它们不是。