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,如需轉載請自行聯系原作者