151 votes

Alternative à itoa () pour convertir un entier en chaîne C ++?

Je me demandais s’il y avait une alternative à `` pour convertir un entier en une chaîne, parce que quand je le lance dans visual Studio j’obtiens des avertissements, et quand j’essaie de compiler mon programme sous Linux, j’obtiens une erreur de compilation.

186voto

spoulson Points 13391

C ++11, vous pouvez utiliser `` :

Si vous travaillez avec avant de C ++11, vous pouvez utiliser des flux de C++ :

Tiré de http://notfaq.wordpress.com/2006/08/30/c-convert-int-to-string/

56voto

Leon Timmermans Points 23230

Boost::lexical_cast fonctionne très bien.

50voto

paercebal Points 38526

L'archéologie

ltid était un non-standard de la fonction d'assistance conçus pour compléter le atoi fonction standard, et probablement de cacher un sprintf (la Plupart de ses fonctions peuvent être mises en œuvre en termes de sprintf): http://www.cplusplus.com/reference/clibrary/cstdlib/itoa.html

Comme En C

Utiliser sprintf. Ou snprintf. Ou quel que soit l'outil que vous trouvez.

Malgré le fait que certaines fonctions ne sont pas dans la norme, comme l'a mentionné à juste titre par "onebyone" dans un de ses commentaires, la plupart compilateur va vous offrir une solution de rechange (par exemple, Visual C++ dispose de son propre _snprintf vous pouvez typedef pour snprintf si vous en avez besoin).

Le C++.

Utiliser le C++ cours d'eau (dans le cas actuel std::stringstream (ou même le obsolète std::strstream, tel que proposé par Herb Sutter dans un de ses livres, parce que c'est un peu plus rapide).

Conclusion

Vous êtes en C++, ce qui signifie que vous pouvez choisir la façon dont vous le souhaitez:

  • La façon plus rapide (c'est à dire comme en C), mais vous devez vous assurer que le code est un goulot d'étranglement dans votre application (prématurée des optimisations sont le mal, etc.) et que votre code est en toute sécurité encapsulé pour ne pas risquer de dépassements de la mémoire tampon.

  • La manière la plus sécuritaire (c'est à dire, le C++), si vous connaissez cette partie du code n'est pas critique, donc mieux vaut être sûr de cette partie du code ne cassera pas à des moments aléatoires, parce que quelqu'un a pris un taille ou un pointeur (ce qui arrive dans la vraie vie, comme... hier, sur mon ordinateur, parce que quelqu'un a pensé que c'était "cool" pour utiliser le moyen plus rapide sans vraiment avoir besoin).

35voto

Jeremy Ruten Points 59989

Essayez la fonction sprintf() :

sprintf() est comme printf() mais sorties vers une chaîne.

En outre, comme Parappa mentionné dans les commentaires, vous pouvez utiliser snprintf() pour arrêter un débordement de tampon se produise (où le nombre que vous voulez convertir ne tient pas la taille de votre chaîne.) Il fonctionne comme ceci :

20voto

1800 INFORMATION Points 55907

Dans les coulisses, le lexical_cast fait :

Si vous ne voulez pas de « glisser dans » coup de pouce pour ce faire, puis à l’aide de ce qui précède est une bonne solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X