CryEngine的Hashing函数如何工作?

Dub*_*Dot 2 c c++ hash cryengine

unsigned int HashString( const char *string ) {
    const char* p;
    unsigned hash = 40503;

    for ( p = string; *p != '\0'; ++p ) {
        hash += *p;
        hash += ( hash << 10 );
        hash ^= ( hash >> 6 );
    }
    hash += ( hash << 3 );
    hash ^= ( hash >> 11 );
    hash += ( hash << 15 );

    return hash;
}
Run Code Online (Sandbox Code Playgroud)

只是徘徊在他们的代码上.虽然我以前从未见过像这样的散列函数.

当谈到按位运算时,我并不太专业,我知道位移和屏蔽是如何工作的,但只是在检查位是否设置的基本情况下.

这到底是做什么的?

leo*_*loy 6

请阅读此处以获取一般概述,并查看"一次性哈希"(由Jenkins提供),这与此一致.

另请参阅此答案中提到的Wikipedia条目.

"这究竟是一个好哈希?" 不完全是.这些转变有点武断,主要来自一些启发式和实证检验.