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);
}