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?