天天看點

字元串哈希函數ELFHash的了解

unsigned long ElfHash ( const unsigned char *name )

{

    unsigned long   h = 0, g;

    while ( *name )

    {

        h = ( h << 4 ) + *name++;

        if ( g = h & 0xF0000000 )//如果最高位不為0,則說明字元已經7個,如果不處理,再加第八個字元時,第一個字元會被移出

          //是以要有如下處理是每一個字元都對字元串的值進行影響。

            h ^= g >> 24;//将第一個字元去影響後面每一個字元的

        h &= ~g;//清空28到31位。g的28位到31位于h的28位到31位完全相同,且g的其他位完全為0,是以g取反之後,與h相與,之後,

//h的28到31位清空,但是其他位都保留了下來。

    }

    return h;

}

本文轉自 神迹難覓 51CTO部落格,原文連結:http://blog.51cto.com/ji123/1980789,如需轉載請自行聯系原作者

繼續閱讀