? Formater une string "à la printf" (ou CString.Format)
Bonjour,
J'ai la mauvaise habitude d'utiliser le type microsoft CString au lieu des std::string . Notamment à cause de cette fonction: CString::Format qui est super pratique pour formater des chaînes à la mode printf().
Mais voilà, aujourd'hui je dois apprendre à m'en passer et utiliser les string standard c++. :?
je voudrais reprendre mon ancien code qui faisait très simplement:
Code:
1 2
| CString msg;
msg.Format("blabla=%02iblabla%04X\r\n", 1 , i ); |
pour obtenir par exemple : blabla=01blablaFFFF
J'ai d'abord pensé (après avoir re-relu toute la FAQ c++ [edit: sur les strings seulement ^^ ]) à utiliser les streams avec quelque chose dans ce gout là:
Code:
1 2 3
| ostringstream oss;
oss << "blabla" << i << blabla // etc
oss.str() |
Mon problème dans ce cas là est que je ne sait pas comment formater mon entier pour avoir 2 digits avec un zero, et encore moins comment obtenir une conversion hexa à 4 caractères.
Autre idée, revenir au bon vieux sprintf...
Mais que vais-je devenir le jour où je ne connaitrais pas la taille de la chaîne en sortie ? J'avoue que ça m'embete pas mal de revenir à des gestions manuelles de la taille des chaînes...
Quelle est la meilleure solution ?
Merci de votre aide.
sstream et iomanip std::setprecision
pour formater des double en string, j'ai trouvée une solution simple dans l'article de farscape : http://farscape.developpez.com/Articles/Conversions/
Code:
1 2 3 4 5 6 7 8 9 10
| #include <string>
#include <sstream>
#include <iomanip>
double pi=3.141593;
char car='B';
ostringstream os;
os << setprecision(3) << pi << car << '\n';
cout << os.str(); // on renvoit ici sur cout mais tout l'intérêt d'os est de faire ce que l'on veut de la chaîne os.str() |
qui retourne