С++ конвертировать строку в uint64_t

Я пытаюсь преобразовать из строки в целое число uint64_t. stoi возвращает 32-битное целое число, поэтому в моем случае это не сработает. Существуют ли другие решения?

Ответ 1

Ты пробовал

uint64_t value;
std::istringstream iss("18446744073709551610");
iss >> value;

?

Посмотреть демо-версию


Это может работать и для устаревших стандартов.

Ответ 2

Попробуйте std::stoull если вы используете С++ 11 или выше.

Этот пост также может помочь. Я не пометил это как дубликат, потому что другой вопрос касается C.

Ответ 3

Если вы используете boost, вы можете использовать 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

Ответ 4

Вы можете использовать strtoull() из & lt;cstdlib>, если вы используете С++ 11 или новее. Иначе, если вам это нужно и с c99, вы можете перейти к функции strtoull() в stdlib.h из C.

Смотрите следующий пример

#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";
}