我正在使用 djb2 算法生成字符串的哈希密钥,如下所示
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
现在,每个循环都会与两个大数字相乘,一段时间后,字符串的第 4 个或第 5 个字符会出现溢出,因为哈希值变得很大
如何重构才能使哈希值不溢出并且哈希也正确发生