我使用djb2算法为字符串生成哈希键,如下所示
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
Run Code Online (Sandbox Code Playgroud)
现在每个循环都有两个大数字的乘法,经过一段时间后,字符串的第5个字符的第4个字符随着哈希值变大而出现溢出
重构的正确方法是什么,以便哈希值不会溢出并且哈希也正确发生