我在 C/C++ 中使用 murmurhash 函数,就像这里提出的那样:https ://sites.google.com/site/murmurhash/ (MurmurHash2.cpp)。我在不同的键上多次调用此方法。但是,这种行为不是确定性的。有时对于相同的键,我会得到不同的结果(相同的键,相同的长度,相同的种子,不同的返回值)。我对其进行了调试,似乎与以下行有所不同:
line 33: unsigned int k = *(unsigned int *)data;
在该行之后,该方法的相同输入有不同的 k 值,这也会导致返回的最终 h 不同。
我是不是误会了什么?导致这种行为的问题可能是什么?提前致谢!
有关调用的更多详细信息:
调用来自 Lua 代码,Lua 代码调用具有以下签名的 C 函数:
int preparehash(lua_State *L)
然后,该函数从 Lua 堆栈中读取参数并调用以下使用 MurmurHash2 的函数:
unsigned int hashing(const char *a, unsigned int seed) {
int len = (int)sizeof(a);
unsigned int b = MurmurHash2(a,len,seed);
return b;
}