C ++将字符串转换为uint64_t

时间:2017-02-21 01:06:27

标签: c++ string uint64

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

5 个答案:

答案 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;
}

实例:http://coliru.stacked-crooked.com/a/c593cee68dba0d72

答案 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”:

  • 第一个循环:值为1
  • 第二个循环:值是1 * 10 + 2 = 12
  • 第三循环:值是12 * 10 + 3 = 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;
  }
}