web-dev-qa-db-fra.com

C ++ convertit la chaîne en uint64_t

J'essaie de convertir une chaîne en un entier uint64_t. stoi renvoie un entier 32 bits, donc cela ne fonctionnera pas dans mon cas. Y a-t-il d'autres solutions?

12
Cauchy

As-tu essayé

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

?

Voir ( Démo en direct


Cela peut également fonctionner pour des normes obsolètes.

12
πάντα ῥεῖ

Essayez std::stoull si vous utilisez C++ 11 ou supérieur.

Ce message peut également être utile. Je ne l'ai pas marqué comme doublon car l'autre question concerne C.

16
Gambit

Si vous utilisez boost, vous pouvez utiliser 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;
}

Exemple en direct: http://coliru.stacked-crooked.com/a/c593cee68dba0d72

3
Vada Poché

Vous pouvez utiliser strtoull () à partir de < cstdlib > si vous utilisez C++ 11 ou plus récent. Sinon, si vous en avez également besoin avec c99, vous pouvez opter pour la fonction strtoull () dans stdlib.h à partir de C.

Voir l'exemple suivant

#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