我尝试了很多,尤其是将完整的 64 位十六进制字符串转换为有符号的 64 位整数。现在我结束了这个:
function sha1_64bitInt($str) {
$u = unpack('N2', sha1($str, true));
return ($u[1] << 32) | $u[2];
}
Run Code Online (Sandbox Code Playgroud)
表演是在中间的某个地方。比实现完整的散列算法(如 SimpleHash 或 dbj2)要好得多,而且比对sha1()or的裸调用慢得多crc32。
当曾经有更好的解决方案可以转换为 64 位整数时,可以在不破坏向后兼容性的情况下改进此功能(我希望)。