Tengo un conector HTTP en mi proyecto de iPhone y las consultas deben tener un conjunto de parámetros desde el nombre de usuario usando el hash Fowler-Noll-Vo (FNV).Objective-C: Fowler-Noll-Vo (FNV) Implementación Hash
que tienen una implementación de Java que trabajan en este momento, este es el código:
long fnv_prime = 0x811C9DC5;
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash *= fnv_prime;
hash ^= str.charAt(i);
}
Ahora en el lado iPhone, lo hice:
int64_t fnv_prime = 0x811C9DC5;
int64_T hash = 0;
for (int i=0; i < [myString length]; i++)
{
hash *= fnv_prime;
hash ^= [myString characterAtIndex:i];
}
Este script no me da el mismo resultado tiene Java.
En primer bucle, me sale esto:
de hash = 0
de hash = 100 (primera letra es "d")
de hash = 1865261300 (por hachís = 100 y fnv_prime = - 2128831035 como en Java)
¿Alguien ve algo que me falta?
¡Gracias de antemano por la ayuda!
En Java como en Obj-C obtengo el mismo valor para prime = -2128831035 En Java cuando pongo "0x811C9DC5L" obtengo el valor = 2166136261 – Dough
No debe obtener -2128831035 en Obj-C. ¿Estás seguro de que esto no es un artefacto de cómo imprimir ese valor? (es decir, ¿usó "% lld" o "% d" en su 'printf()'?) –
Y una pista que indica que -2128831035 no es el valor numérico correcto: ¡no es primo! -2128831035 = - (3 * 5 * 17 * 101 * 82657) –