我正在尝试使用 MurmurHash(在 64 位计算机上返回 64 位哈希)并已将简单的 3 个字母字符串“是”发送如下
char* charptr = "yes";
cout << MurmurHash64A(charptr, 3, 10);
(其中 3 是长度,10 是种子)这给出了预期的 64 位散列响应,我可以设置更多指向 C 字符串的指针,它们都返回相同的散列值。
但是如果我尝试向它发送一个 C++ 字符串:
string mystring = "yes";
string* strptr = &mystring;
cout << MurmurHash64A(strptr, 3, 10);
...我得到了与 C 字符串方法不同的结果,更重要的是,如果我以相同的方式设置这些字符串中的几个,它们都会给出不同的结果。这向我表明,字符串可能没有存储在连续的内存位置,一些谷歌搜索支持了这一点。所以我然后尝试在动态内存中设置一个向量,因为这是我能想到的强制连续内存的唯一方法。就像 C++ 字符串方法一样,它返回与 C 字符串方法不同的结果,当我设置几个时,它们都返回彼此不同的结果。我将它们设置如下:
char yes[3] = {'y', 'e', 's'};
vector<char> *charvec = new vector<char>;
void* myvecptr3 = &charvec;
charvec->reserve(3);
charvec->push_back(yes[0]);
charvec->push_back(yes[1]);
charvec->push_back(yes[2]);
据我了解,我的 char 向量将从给定向量的地址开始,并以与 C 字符串相同的方式用我的三个字符填充连续字节。我很困惑为什么我得到不同的结果,有什么帮助吗?谢谢 C