C将字符串转换为uint64_t

新手上路,请多包涵

我正在尝试从字符串转换为 uint64_t 整数。 stoi 返回一个 32 位整数,所以在我的情况下它不起作用。还有其他解决方案吗?

原文由 Cauchy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

尝试这个:

 #include <iostream>
#include <sstream>
#include <cstdint>

int main() {
    uint64_t value;
    std::istringstream iss("18446744073709551610");
    iss >> value;
    std::cout << value;
}

观看 现场演示


这也可能适用于过时的标准。

原文由 πάντα ῥεῖ 发布,翻译遵循 CC BY-SA 4.0 许可协议

所有这些解决方案都不符合我的需要。

  • istringstream - 将字符串“123asd”解析为 123。
  • stoull - 会引发错误,我不想使用 try catch。
  • 并且当时没有使用boost。

所以我只使用一个for循环:

 uint64_t val = 0;
for (auto ch: new_str) {
    if (not isdigit(ch)) return 0;
    val = 10 * val + (ch - '0');
}

编辑:另一个问题是溢出,如果字符串的数字大于 uint64_t。我添加了另一个开始 if 来检查字符串中的字符数。

原文由 Avizipi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题