gpt4 book ai didi

c++ - 将 C 字符串和 vector 发送到 MurmurHash 会产生不一致的结果

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:54 24 4
gpt4 key购买 nike

我正在尝试使用 MurmurHash(在 64 位计算机上返回 64 位哈希值)并已将简单的 3 个字母字符串“yes”发送给它,如下所示

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 字符串方法不同的结果,更重要的是,如果我以相同的方式设置其中的几个字符串,它们都会给出不同的结果。这向我暗示字符串可能没有存储在连续的内存位置,一些谷歌搜索支持这一点。所以我然后尝试在动态内存中设置一个 vector ,因为这是我能想到的强制连续内存的唯一方法。就像 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 vector 将从给定 vector 的地址开始,并以与 C 字符串相同的方式用我的三个字符填充连续字节。我很困惑为什么我得到不同的结果,有什么帮助吗?谢谢C

最佳答案

&mystring指向字符串对象。你想使用 mystring.c_str()获取指向原始字符数组的指针。

对于 vector ,您需要 &(*charvec)[0] .但您可能不想使用 new ;你可以做 vector<char> charvec; void *myvecptr3 = &charvec[0]; .

关于c++ - 将 C 字符串和 vector 发送到 MurmurHash 会产生不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com