繁体   English   中英

如何将大整数从字符串转换为uint64_t?

[英]How to convert a large integer from a string to a uint64_t?

我有一个大整数存储为字符串。 我需要将其转换为整数( uint64_t )。 我尝试了stoi() ,但是在抛出std::out_of_range stoi()实例后崩溃了。

该字符串的最大值为64位整数,最大值为18,446,744,073,709,551,615(无符号long int的最大值)。

除了手动以外,我该如何做?

只要字符串包含的数字小于std::numeric_limits<uint64_t>::max() ,那么std::stoull()就会满足您的期望。

std::stoull()函数是C ++ 11中的新增功能。)

您可以使用stringstream做到这一点。 C ++ 98支持此功能std::stoull() C ++ 11中添加了std::stoull()函数)。

#include <stdint.h>
#include <iostream>
#include <sstream>
using namespace std;

uint64_t string_to_uint64(string str) {
  stringstream stream(str);
  uint64_t result;
  stream >> result;
  return result;
}

int main() {
  string str = "1234567891234567";
  uint64_t val = string_to_uint64(str);
  cout << val;
  return 0;
}

一种方法是使用字符串流:

unsigned long long val;
std::istringstream stream(inputstring);
stream >> val;

根据此参考 ,至少对unsigned long long operator>>有一个重载,这可能与uint64_t相同。

否则,您可能必须手动进行操作,例如将字符串拆分为可处理的片段,然后通过与正确的基数相乘来合并结果。


可以肯定的是,我现在就去做:

unit64_t to_uint64(std::string const & in) {
  static_assert(sizeof(unsigned long long) == sizeof(uint64_t), "ull not large enough");
  unsigned long long val = 0;
  std::istringstream stream(in);
  stream >> val;
  return val;
}

暂无
暂无

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

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