2
私は古いゲームで使用されるアーカイブ・ファイル・フォーマットリバースエンジニアリングし、それは(手で逆コンパイル)次の関数を使用してファイル名をハッシュ化されたことを発見:このハッシュ関数とは何ですか?
int hash(char* filename) {
unsigned int a = 0;
int b = 0;
for(int i = strlen(filename)-1; i>=0; i--)
char c = toupper(filename[i]);
a=(a<<5)+(a>>25);
b+=c;
a+=b+c;
}
return a;
}
これは、標準のものである場合、私は思ったんだけど、またはそれが開発者によってランダムに選択されたものである場合。
ゲームは何年ですか?かなり現代的な乱数生成関数は同じ考え方に基づいています –
Shift-Add-XORハッシュと似ていますが、XORingの代わりに追加が追加されています。いくつかの既存のハッシュアルゴリズムのためのhttp://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx#existingを参照してください。 – Christoph
私には古いサムスン文字列ハッシュ関数のように見えます。 'a << 5^a >> 27'がよく見られます。 – leppie