繁体   English   中英

如何将字符串转换为 uint64_t?

[英]How to convert a string to uint64_t?

这与其他问题不同(不是重复的)因为我在字符串中使用实际字符而不仅仅是数字,使用 atoi 和 stoi 和 stoll 我不能这样做,因为它是无效的

到目前为止我试过

    std::string k = "MyString";
    uint64_t test = (uint64_t)reinterpret_cast<std::string*>(&k);
    printf("%hu \n", test);

但是每次我启动程序时它都会返回随机值。 有任何想法吗? 对不起,我有点新

它应该返回 5582584972703264359

你要这个:

uint64_t stringToUint(std::string k)
{
    uint64_t r = 0;
    for (auto const& j : k)
    {
        r <<= 8;
        r |= j;
    }
    return r;
}

现场观看

让我们看看你的代码:

uint64_t test = (uint64_t)reinterpret_cast<std::string*>(&k);

这表示假装uint64_t存储在std::string在 memory 中的位置。 但是没有法律规定, std::string在 memory 中存储的内容必须是字符串本身的内容。 事实上,最有可能存储的是字符串的地址及其长度。

为什么? 因为std::string可以在一分钟存储 4 个字节,然后在下一分钟存储 1,000 个字节。 但是一个 object 本身不能仅仅因为你改变了它的内容而在 memory 中移动。 因此,通常需要某种程度的间接性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM