0 c++
这与其他问题不同(不是重复的)因为我在字符串中使用实际字符而不仅仅是数字,对于 atoi 和 stoi 和 stoll 我不能这样做,因为它是无效的
到目前为止我试过
std::string k = "MyString";
uint64_t test = (uint64_t)reinterpret_cast<std::string*>(&k);
printf("%hu \n", test);
Run Code Online (Sandbox Code Playgroud)
但是每次启动程序时它都会返回随机值。有任何想法吗?对不起,我有点新
它应该返回 5582584972703264359
你要这个:
uint64_t stringToUint(std::string k)
{
uint64_t r = 0;
for (auto const& j : k)
{
r <<= 8;
r |= j;
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
让我们看看你的代码:
uint64_t test = (uint64_t)reinterpret_cast<std::string*>(&k);
Run Code Online (Sandbox Code Playgroud)
这表示假装 auint64_t存储std::string在内存中的位置。但是没有法律规定存储std::string在内存中的内容必须是字符串本身的内容。事实上,最有可能存储的是字符串的地址及其长度。
为什么?因为 astd::string一分钟可以存储 4 个字节,然后下一分钟可以存储 1,000 个字节。但是一个对象本身不能仅仅因为你改变了它的内容而在内存中移动。所以通常需要某种程度的间接性。
注意:这不是一件特别自然或合乎逻辑的事情。并且没有解释用例。所以我只是编写了产生请求结果的代码,而没有做任何奇怪或随意的事情。它可能会也可能不会对较短的字符串、较长的字符串或任何不同的字符串执行预期的操作,因为我不知道任何其他字符串的预期行为是什么。
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |