Ich habe einen HTTP-Connector in meinem iPhone-Projekt und Abfragen müssen einen Parameter aus dem Benutzernamen mit dem Fowler-Noll-Vo (FNV) Hash haben.Ziel-C: Fowler-Noll-Vo (FNV) Hash-Implementierung
ich eine Java-Implementierung haben zu diesem Zeitpunkt arbeiten, dies ist der Code:
long fnv_prime = 0x811C9DC5;
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash *= fnv_prime;
hash ^= str.charAt(i);
}
Jetzt auf dem iPhone Seite, habe ich dies:
int64_t fnv_prime = 0x811C9DC5;
int64_T hash = 0;
for (int i=0; i < [myString length]; i++)
{
hash *= fnv_prime;
hash ^= [myString characterAtIndex:i];
}
Dieses Skript mir nicht geben Das gleiche Ergebnis hat das Java.
In erster Schleife, bekomme ich diese:
hash = 0
hash = 100 (erster Buchstabe ist "d")
hash = 1865261300 (für hash = 100 und fnv_prime = - 2128831035 wie in Java)
Wer sieht etwas, das mir fehlt?
Vielen Dank im Voraus für die Hilfe!
In Java wie in Obj-C bekomme ich den gleichen Wert für prime = -2128831035 In Java, wenn ich "0x811C9DC5L" setze bekomme ich Wert = 2166136261 – Dough
Sie sollten -2128831035 in Obj-C nicht erhalten. Sind Sie sicher, dass dies kein Artefakt dafür ist, wie Sie diesen Wert drucken? (d. h., haben Sie "% lld" oder "% d" in Ihrem "printf()" verwendet?) –
Und ein Hinweis, dass -2128831035 nicht der richtige Zahlenwert ist: es ist nicht prim! -2128831035 = - (3 * 5 * 17 * 101 * 82657) –