Tôi có trình kết nối HTTP trong dự án iPhone của mình và truy vấn phải có thông số được đặt từ tên người dùng bằng cách sử dụng hàm băm Fowler – Noll – Vo (FNV).Mục tiêu-C: Fowler – Noll – Vo (FNV) Thực hiện băm
Tôi có một thực hiện Java làm việc tại thời điểm này, đây là đoạn code:
long fnv_prime = 0x811C9DC5;
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash *= fnv_prime;
hash ^= str.charAt(i);
}
Bây giờ ở phía bên iPhone, tôi đã làm điều này:
int64_t fnv_prime = 0x811C9DC5;
int64_T hash = 0;
for (int i=0; i < [myString length]; i++)
{
hash *= fnv_prime;
hash ^= [myString characterAtIndex:i];
}
kịch bản này không cho tôi kết quả tương tự có kết quả Java.
Trong vòng đầu tiên, tôi có được điều này:
hash = 0
hash = 100 (chữ cái đầu tiên là "d")
hash = 1865261300 (đối với hash = 100 và fnv_prime = - 2128831035 giống như trong Java)
Có ai đó nhìn thấy thứ tôi đang thiếu không?
Cảm ơn bạn đã trợ giúp!
Trong Java như trong Obj-C, tôi nhận được cùng một giá trị cho số nguyên tố = -2128831035 Trong Java khi tôi đặt "0x811C9DC5L", tôi nhận giá trị = 2166136261 – Dough
Bạn sẽ không nhận được -2128831035 trong Obj-C. Bạn có chắc chắn đây không phải là một tạo tác của cách bạn in giá trị đó? (tức là bạn đã sử dụng "% lld" hoặc "% d" trong 'printf()'?) –
Và một đầu mối rằng -2128831035 không phải là giá trị số chính xác: nó không phải là số nguyên! -2128831035 = - (3 * 5 * 17 * 101 * 82657) –