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?
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.
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.
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
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";
}