0

我在 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;
}
4

1 回答 1

1

您没有向我们展示 的类型data,但那行

unsigned int k = *(unsigned int *)data;

看起来从根本上是错误的,并且可以解释为什么您会看到不同的值。如果data与 的宽度不同unsigned int或对齐方式不同,则某些字节k可能会收到一些垃圾,这些垃圾恰好位于 的高位字中*data

于 2013-04-02T11:52:26.357 回答