Cadena a la función de hash entero con precisión
Quiero un hash de una matriz de caracteres en un int o un largo. El valor resultante tiene que adherirse a un valor de precisión dado. La función que he estado usando se da a continuación:
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);
}
La cadena que se va a hash es similar a "SAEUI1210.00000010_1".
Sin embargo, esto produce valores duplicados en algunos casos. ¿Hay alguna buena alternativa que no duplique el mismo hash para diferentes valores de cadena?