ELFhash函數關鍵是要取得字符串對應的hash值。(別人的分析:它對於長字符串和短字符串都很有效,字符串中每個字符都有同樣的作用,它巧妙地對字符的ASCII編碼值進行計算,ELFhash函數對於能夠比較均勻地把字符串分佈在散列表中。這些函數使用位運算使得每一個字符都對最後的函數值產生影響。)
ELFhash():參考http://blog.chinaunix.net/uid-24683784-id-3061386.html
int ELFhash(char *key){ unsigned long h=0; unsigned long x=0; while(*key) { h=(h<<4)+(*key++); //h左移4位,當前字符ASCII存入h的低四位 if( (x=h & 0xF0000000L)!=0) { //如果最高位不爲0,則說明字符多餘7個,如果不處理,再加第九個字符時,第一個字符會被移出 //因此要有如下處理 h^=(x>>24); //清空28~31位 h&=~x; } } return h % N; }