djb2 哈希函数

问题描述 投票:0回答:5

我正在使用 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 个字符会出现溢出,因为哈希值变得很大

如何重构才能使哈希值不溢出并且哈希也正确发生

hash string-hashing
5个回答
21
投票

哈希计算经常会溢出。这通常根本不是问题,只要你能保证当它“确实”溢出时会发生什么。不要忘记,散列的目的不是拥有一个具有大小等意义的数字 - 它只是检测相等性的一种方法。为什么溢出会干扰呢?


5
投票


4
投票


1
投票


0
投票

StringExtensions.GetDjb2HashCode

© www.soinside.com 2019 - 2024. All rights reserved.