char配列をintまたはlongにハッシュしたい。結果の値は、指定された精度値に従わなければなりません。私が使用してきた 機能は以下の通りである:文字列から整数へのハッシュ関数の精度
int GetHash(const char* zKey, int iPrecision /*= 6*/)
{
/////FROM : http://courses.cs.vt.edu/~cs2604/spring02/Projects/4/elfhash.cpp
unsigned long h = 0;
long M = pow(10, iPrecision);
while(*zKey)
{
h = (h << 4) + *zKey++;
unsigned long g = h & 0xF0000000L;
if (g) h ^= g >> 24;
h &= ~g;
}
return (int) (h % M);
}
ハッシュされる文字列は「SAEUI1210.00000010_1」に似ています。
ただし、重複する値が生成されることがあります。 異なる文字列値に対して同じハッシュを複製しない良い選択肢はありますか?
CRC 32を使用してみてください。http://en.wikipedia.org/wiki/Crc32 –