djb2 Hash-Funktion
Ich benutze den djb2-Algorithmus, um den Hash-Schlüssel für eine Zeichenfolge zu generieren, die wie folgt lautet:
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
Jetzt gibt es bei jeder Schleife eine Multiplikation mit zwei großen Zahlen. Nach einiger Zeit mit dem 4. oder 5. Zeichen der Zeichenfolge kommt es zu einem Überlauf, da der Hash-Wert sehr groß wird.
Was ist der richtige Weg zum Refactor, damit der Hash-Wert nicht überläuft und das Hashing auch korrekt abläuft