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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage