String-to-Integer-Hashing-Funktion mit Präzision

Ich möchte ein char-Array in ein int oder ein long-Array hacken. Der resultierende Wert muss einem bestimmten Genauigkeitswert entsprechen. Die von mir verwendete Funktion ist unten angegeben:

<code>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);
}
</code>

Die zu hashende Zeichenfolge ähnelt "SAEUI1210.00000010_1".

Dies führt jedoch in einigen Fällen zu doppelten Werten. Gibt es gute Alternativen, die nicht den gleichen Hash für verschiedene Zeichenfolgenwerte duplizieren würden?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage