web-dev-qa-db-ja.com

C ++文字列をuint64_tに変換

文字列をuint64_t整数に変換しようとしています。 stoiは32ビット整数を返すため、私の場合は機能しません。他の解決策はありますか?

12
Cauchy

試しましたか

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

Live Demo を参照してください


これは、古い標準でも機能する場合があります。

12

std::stoull C++ 11以降を使用している場合。

この投稿 も役立つかもしれません。他の質問はCに関するものなので、私はこれを重複としてマークしませんでした。

16
Gambit

ブーストを使用している場合は、 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
Vada Poché

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";
}
0
Gimhani