这是一种高效的字符串Hash函数,用于UNIX的可执行链接格式(ELF)
const int M=LEN; //哈希表中槽的数目
int ELFHash(char *str)
{
unsigned long hash = 0;
unsigned long x;
while (*str)
{
hash = (hash << 4) + (*str++); //将既有哈希值左移4位并加上当前字符的ASCII码
x = hash & 0xF0000000L; //判断最高4位是否为0,及判断是否已存大于7个字符
if (x)
{
hash ^= (x >> 24); //个人理解等同于hash^=*(str-1)
hash &= ~x; //将最高4位清空,给下一个字符留位
}
}
return h%M;
}