Code
/*
elfhash
把一个字串哈希成一个 int
病毒常常用此来加密 windows api 函数,以躲避查杀
数据库的 index 也常使用此方法。
出于跨平台兼容性( big indian and small indian )的考虑。 oracle 把 number在内存中以 char 的方式来存储。但由于同时建立 hash 索引,其访问速度不会有明显下降。
*/
int str2hash( const char* str )
{
if ( str == NULL )
{
return 0;
}
int i = int(*str++);
while( *str )
{
// 循环左移 3 位
i = ( ( i << 3 ) | ( i >> ( sizeof( int ) * 8 - 3 ) ) ) ^ *str++;
}
return i;
};
/*
elfhash
把一个字串哈希成一个 int
病毒常常用此来加密 windows api 函数,以躲避查杀
数据库的 index 也常使用此方法。
出于跨平台兼容性( big indian and small indian )的考虑。 oracle 把 number在内存中以 char 的方式来存储。但由于同时建立 hash 索引,其访问速度不会有明显下降。
*/
int str2hash( const char* str )
{
if ( str == NULL )
{
return 0;
}
int i = int(*str++);
while( *str )
{
// 循环左移 3 位
i = ( ( i << 3 ) | ( i >> ( sizeof( int ) * 8 - 3 ) ) ) ^ *str++;
}
return i;
};