如何将字符串转换为 uint64_t?

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

Dav*_*rtz 5

你要这个:

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 个字节。但是一个对象本身不能仅仅因为你改变了它的内容而在内存中移动。所以通常需要某种程度的间接性。

注意:这不是一件特别自然或合乎逻辑的事情。并且没有解释用例。所以我只是编写了产生请求结果的代码,而没有做任何奇怪或随意的事情。它可能会也可能不会对较短的字符串、较长的字符串或任何不同的字符串执行预期的操作,因为我不知道任何其他字符串的预期行为是什么。