[英]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.