ELFHashアルゴリズム解釈
最近UCCのソースコードを见る时、作者が文字列のハッシュを処理することを见る时、ELFHash関数を使って、そこで少し资料を调べて、このアルゴリズムに対して理解して、记录します
// ELF Hash Function
unsigned int ELFHash(char *str)
{
unsigned int hash = 0;
unsigned int x = 0;
while (*str)
{
hash = (hash << 4) + (*str++);//hash 4 , ASCII hash 。
if ((x = hash & 0xF0000000L) != 0)
{
// 0, 7 , 7 , , , , 。
// , 0, 5-8 , 5-31 , C
// 1-4 , >>28
hash ^= (x >> 24);
// X , X hash 4 , &~ 28-31( 4 ) 。
hash &= ~x;
}
}
// 0 , , 。( , , )
return (hash & 0x7FFFFFFF);
}