int ELFHash(char *str)
{
unsigned int h = 0, g;
while (*str) {
h = (h << 4) + *str++; //将当前字符的高4位加到哈希值的最低4位,低4位放在左移后哈希传值的低4位
if ((g = h & 0xF0000000) != 0) {
/*最前面的4位非零表示多于7个字符*/
h ^= (g >> 24); //这句只会修改h的第5-8位,因为h是无符号的,左移操作是逻辑移位,如果h定义为有符号的,就是算术移位
h &= ~g;//将h的高4位清零
}
}
return h &0x7fffffff;
}
ELFHash的理解
最新推荐文章于 2020-03-10 17:37:59 发布