4 Stimmen

String to Integer Hashing Funktion mit Präzision

Ich möchte ein char-Array in ein int oder ein long hashen. Der resultierende Wert muss einen bestimmten Präzisionswert einhalten. Die Funktion, die ich verwendet habe, ist unten angegeben:

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

Die zu hashende Zeichenfolge ist ähnlich wie "SAEUI1210.00000010_1".

Dies führt jedoch in einigen Fällen zu doppelten Werten. Gibt es irgendwelche guten Alternativen, die nicht den gleichen Hash für verschiedene String-Werte duplizieren würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X