我正在尝试将字符串转换为uint64_t整数。 stoi
返回一个32位整数,因此在我的情况下不起作用。还有其他解决方案吗?
答案 0 :(得分:13)
如果您使用的是C ++ 11或更高版本,请尝试std::stoull
。
This post也可能有所帮助。我没有把它标记为副本,因为另一个问题是关于C.
答案 1 :(得分:11)
你试过吗
uint64_t value;
std::istringstream iss("18446744073709551610");
iss >> value;
请参阅Live Demo
这也适用于过时的标准。
答案 2 :(得分:3)
如果您正在使用提升,则可以使用boost::lexical_cast
#include <iostream>
#include <string>
#include <boost-1_61/boost/lexical_cast.hpp> //I've multiple versions of boost installed, so this path may be different for you
int main()
{
using boost::lexical_cast;
using namespace std;
const string s("2424242");
uint64_t num = lexical_cast<uint64_t>(s);
cout << num << endl;
return 0;
}
答案 3 :(得分:0)
如果使用的是C ++ 11或更高版本,则可以使用<cstdlib>中的strtoull()。 否则,如果您还需要使用c99,则可以在C的stdlib.h中使用strtoull()函数。
请参见以下示例
#include <iostream>
#include <string>
#include <cstdlib>
int main()
{
std::string value= "14443434343434343434";
uint64_t a;
char* end;
a= strtoull( value.c_str(), &end,10 );
std::cout << "UInt64: " << a << "\n";
}
答案 4 :(得分:-1)
注意:这是针对c而不是C ++的解决方案。因此,使用C ++可能会更困难。 在这里,我们将String HEX转换为uint64_t十六进制值。字符串的所有单个字符都将转换为十六进制整数一。例如以10为底-> String =“ 123”:
因此,这种逻辑用于将十六进制字符的字符串转换为uint_64hex值。
uint64_t stringToUint_64(String value) {
int stringLenght = value.length();
uint64_t uint64Value = 0x0;
for(int i = 0; i<=stringLenght-1; i++) {
char charValue = value.charAt(i);
uint64Value = 0x10 * uint64Value;
uint64Value += stringToHexInt(charValue);
}
return uint64Value;
}
int stringToHexInt(char value) {
switch(value) {
case '0':
return 0;
break;
case '1':
return 0x1;
break;
case '2':
return 0x2;
break;
case '3':
return 0x3;
break;
case '4':
return 0x4;
break;
case '5':
return 0x5;
break;
case '6':
return 0x6;
break;
case '7':
return 0x7;
break;
case '8':
return 0x8;
break;
case '9':
return 0x9;
break;
case 'A':
case 'a':
return 0xA;
break;
case 'B':
case 'b':
return 0xB;
break;
case 'C':
case 'c':
return 0xC;
break;
case 'D':
case 'd':
return 0xD;
break;
case 'E':
case 'e':
return 0xE;
break;
case 'F':
case 'f':
return 0xF;
break;
}
}