我想散列一個字符數組到一個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 – 2013-04-22 04:36:12