J'ai quelques lignes d'information d'un fichier de données en C++. Une information est un nombre long de 12 caractères. Comment puis-je convertir cela de la chaîne à long long (je pense que longtemps est le plus approprié pour cela) sans perte de données?Convertir une chaîne ASCII en long long
1
A
Répondre
5
En C++, il n'y a pas de type de données long long
. It's available in C99. Cependant, vous pouvez utiliser int64_t
. Inclure <stdint.h>
. Utilisez boost::lexical_cast
pour convertir la chaîne en int64_t
.
Ou vous pouvez écrire une fonction de conversion vous-même comme:
int64_t convert(const std::string &s)
{
if(s.size() == 0)
std::runtime_error error("invalid argument");
int64_t v = 0;
size_t i=0;
char sign = (s[0] == '-' || s[0] == '+') ? (++i, s[0]) : '+';
for(; i < s.size(); ++i)
{
if (s[i] < '0' || s[i] > '9')
throw std::runtime_error("invalid argument");
v = v * 10 + s[i] - '0';
}
return sign == '-' ? -v : v;
}
Code d'essai:
int main() {
try{
std::cout << convert("68768768") << std::endl;
std::cout << convert("+68768768") << std::endl;
std::cout << convert("-68768768") << std::endl;
std::cout << convert("68768768x") << std::endl;
}catch(const std::exception &e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
Sortie:
68768768
68768768
-68768768
invalid argument
Démo en ligne: http://ideone.com/nnSLp
0
Un entier de 64 bits est suffisant pour représenter n'importe quel nombre décimal à 12 chiffres (avec beaucoup d'espace disponible). Ainsi, en fonction de votre plate-forme, il se peut qu'un long
suffise. Si c'est le cas, vous pouvez utiliser strtol
ou strtoul
. Si vous trouvez que vous avez besoin d'un long long
, jetez un oeil à strtoll
et strtoull
.
Questions connexes
- 1. convertir la chaîne en long long
- 2. Convertir la chaîne à long long C?
- 3. Convertir un long dans une chaîne C++?
- 4. Convertir en long et valider
- 5. convertir int [2] en long
- 6. comment convertir Qstring en Long?
- 7. Comment convertir une géocellule en lat/long?
- 8. Comment convertir unsigned long de la chaîne
- 9. Conversion long int en chaîne en PHP
- 10. Parse une chaîne comme un (long long) entier
- 11. convertir 'int' en 'long' ou accéder à un tableau trop long avec 'long'
- 12. Lecture long unsigned long en utilisant fscanf()
- 13. Convertir NSDate en chaîne de long format et revenir?
- 14. Comment convertir de longues valeurs hexadécimales ASCII en une chaîne?
- 15. long double à la chaîne
- 16. convertir un entier en long en vitesse
- 17. convertir String en long en Java
- 18. Long HTML Ajax Chaîne
- 19. Division de unsigned long long
- 20. Conversion d'une chaîne de quatre caractères en un long
- 21. Python long type C 'long long'
- 22. C/C++ long long à Java long
- 23. "long long long" est trop long pour gcc?
- 24. Convertir DateTime en long et inversement
- 25. unsigned long long à double
- 26. Convertir NSString en Non signé long
- 27. Comment convertir un sqlite3_int64 en un long?
- 28. C#: Comment convertir long en ulong
- 29. Convertir lat long en objet geojson
- 30. Convertir la géométrie en lat et long
je dirais que 90% il va fi sd sur sa plate-forme 'long' pour être seulement 32 bits à moins qu'il ne compile avec GCC pour les systèmes 64 bits (ou d'autres compilateurs plus particuliers) – xanatos
Cela dit, vous pouvez mentionner' strtol'/'strtoul' pour une utilisation avec des longs ordinaires. . –