【问题标题】:C++: Convert std::string to UINT64C++:将 std::string 转换为 UINT64
【发布时间】:2019-02-26 17:20:08
【问题描述】:

我需要将文本文件中数字输入的(十进制,如果重要的话)字符串表示形式转换为 UINT64 以传递给我的数据对象。

    size_t startpos = num.find_first_not_of(" ");
    size_t endpos = num.find_last_not_of(" ");
    num = num.substr(startpos, endpos-startpos+1);
    UINT64 input;
    //convert num to input required here

有没有办法以类似于 atoi() 的方式将 std::string 转换为 UINT64?

谢谢!

编辑: 工作代码如下。

size_t startpos = num.find_first_not_of(" ");
size_t endpos = num.find_last_not_of(" ");
num = num.substr(startpos, endpos-startpos+1);
UINT64 input; //= std::strtoull(num.cstr(), NULL, 0);

std::istringstream stream (num);
stream >> input;

【问题讨论】:

  • 在 uint64 中保存小数?
  • 这是一个我正在使用现有结构的项目。在我的例子中,这只是对象的结构。

标签: c++ string uint64


【解决方案1】:

使用strtoull_strtoui64()。 示例:

std::string s = "1123.45";
__int64 n = std::strtoull(s.c_str(),NULL,0);

【讨论】:

  • 谢谢!我正在尝试搜索如何获取指向 std::string 开头和结尾的指针,但还没有找到任何东西。你知道我怎样才能得到这些吗?
  • @IpqD 我已经更新了答案。关于字符串,有:string.begin()string.end()迭代器。
  • 再次感谢:)。我包含了 库,但我的项目似乎说 std 没有成员“strtoull”。你知道这是不是我做错了什么吗?另外,__int64 和 UINT64 有区别吗?
  • uint64_t 是标准的固定长度 64 位无符号整数类型。它是 C 标准的可选部分,在 <stdint.h> 中定义,在 C++ 中因此在 <cstdint> 中。
【解决方案2】:

至少有两种方法可以做到这一点:

  1. 构造一个std::istringstream,并使用我们的老朋友>> 运算符。

  2. 只需自行转换即可。解析所有数字,一次一个,将它们转换为一个整数。这是一个非常好的练习。而且由于这是一个无符号值,因此甚至不需要担心负数。我认为这将是任何计算机科学入门课程中的标准家庭作业。至少在我以前是这样的。

【讨论】:

  • istringstream 方法对我有用。谢谢你:)
【解决方案3】:

你可以使用stoull:

char s[25] = "12345678901234567890"; // or: string s = "12345678901234567890";
uint64_t a = stoull(s);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多