我的 iPhone 项目中有一个 HTTP 连接器,并且查询必须使用 Fowler–Noll–Vo (FNV) 哈希从用户名中设置一个参数。
我现在有一个 Java 实现,这是代码:
long fnv_prime = 0x811C9DC5;
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash *= fnv_prime;
hash ^= str.charAt(i);
}
现在在 iPhone 端,我这样做了:
int64_t fnv_prime = 0x811C9DC5;
int64_T hash = 0;
for (int i=0; i < [myString length]; i++)
{
hash *= fnv_prime;
hash ^= [myString characterAtIndex:i];
}
这个脚本没有给我与 Java 相同的结果。
在第一个循环中,我得到了这个:
哈希 = 0
hash = 100(第一个字母是“d”)
hash = 1865261300(对于 hash = 100 和 fnv_prime = -2128831035,就像在 Java 中一样)
有人看到我缺少的东西吗?
在此先感谢您的帮助 !