Equivalent printf ostream

Le
Plotark
Bonjour a tous,

J'aimerais ecrire en c++ l'equivalent de
printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,
u.time_mid,u.time_hi_and_version,
u.clock_seq_hi_and_reserved,u.clock_seq_low);

Je suis sous visual c++.

Quelqu'un sait-il comment faire pour remplacer tous les formattages %x.x?

Plotark
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alexandre
Le #738370
"Plotark" news:c4r70l$9gb$
Bonjour a tous,

J'aimerais ecrire en c++ l'equivalent de
printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,
u.time_mid,u.time_hi_and_version,
u.clock_seq_hi_and_reserved,u.clock_seq_low);

Je suis sous visual c++.

Quelqu'un sait-il comment faire pour remplacer tous les formattages %x.x?

Plotark

tu peux déjà faire :

cout.printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,
u.time_mid,u.time_hi_and_version,u.clock_seq_hi_and_reserved,u.clock_seq_low
);
mais ce n'est qu'un pis-aller...
Regardes la doc de basic_ostream, il existe des fonctions membres
(setprecision par exemple) et des modificateurs pour changer le format de la
sortie.
Bonne chance !

Michel Michaud
Le #738071
Dans news:c4r70l$9gb$,
Quelqu'un sait-il comment faire pour remplacer tous les formattages
%x.x?


Par exemple pour %8.8x, une fois pour toute :

... << right << setfill('0') << hex

puis
... << setw(8) << laValeur ...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Hylvenir
Le #738063
tu peux déjà faire :
cout.printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,
u.time_mid,u.time_hi_and_version,u.clock_seq_hi_and_reserved,u.clock_seq_low
);
mais ce n'est qu'un pis-aller...


On parle bien de C++ là ?
cout.printf ? il n'y a pas de méthode printf sur cout.

kanze
Le #737741
"Michel Michaud" news:
Dans news:c4r70l$9gb$,
Quelqu'un sait-il comment faire pour remplacer tous les formattages
%x.x?


Par exemple pour %8.8x, une fois pour toute :

... << right << setfill('0') << hex

puis
... << setw(8) << laValeur ...


Maintenant, pour %8.6x, comment fais-tu ?

Moi, je fais :
std::cout << GB_Format( "%8.6x" ).with( x ) << 'n' ;
Mais évidemment, il faut télécharge la bibliothèque de ma site
d'abord:-). Et l'installer -- la version sur ma site n'a pas été testé
avec VC++.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Michel Michaud
Le #737419
Dans news:,
"Michel Michaud" news:
Dans news:c4r70l$9gb$,
Quelqu'un sait-il comment faire pour remplacer tous les
formattages %x.x?


Par exemple pour %8.8x, une fois pour toute :

... << right << setfill('0') << hex

puis
... << setw(8) << laValeur ...


Maintenant, pour %8.6x, comment fais-tu ?


Ce n'est ce qu'il demandait (%x.x). Si tu veux dire qu'il y a
des choses difficiles à faire avec les manipulateurs, alors
qu'elles sont faciles avec printf et compagnie, c'est vrai,
mais l'inverse est vrai aussi. Comment fais-tu ceci avec printf ?

cout << dec << setw(12) << setfill('_') << internal << -123;

Qui donne

-________123

Tu me diras que ce n'est pas très utile, mais je crois que %8.6x
non plus !

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Alexandre
Le #737415
"Hylvenir" news:

tu peux déjà faire :
cout.printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,

u.time_mid,u.time_hi_and_version,u.clock_seq_hi_and_reserved,u.clock_seq_low


);
mais ce n'est qu'un pis-aller...


On parle bien de C++ là ?
cout.printf ? il n'y a pas de méthode printf sur cout.

Bah, tu as raison ! Je l'ai pourtant déjà vu (bon, il y a quelque temps, je

ne me rappelle plus sur quel système)... Sans doute une extension ? J'ai
répondu trop vite sans réflechir encore une fois !

Ceci dit (mais je pinaille) printf c'est du C, *donc* du C++ ;-)


Fabien LE LEZ
Le #737149
On Tue, 6 Apr 2004 21:05:40 +0200, "Alexandre"

Ceci dit (mais je pinaille) printf c'est du C, *donc* du C++ ;-)


::printf, oui. cout.printf, non.

--
;-)

Amerio
Le #737147
Plotark wrote:
Bonjour a tous,

J'aimerais ecrire en c++ l'equivalent de
printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,
u.time_mid,u.time_hi_and_version,
u.clock_seq_hi_and_reserved,u.clock_seq_low);

Je suis sous visual c++.

Quelqu'un sait-il comment faire pour remplacer tous les formattages %x.x?


Si tu veux garder la même syntaxe, il y a boost::format qui accepte les même
entrées que printf.

std::cout << boost::format("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-") % u.time_low %
u.time_mid ....... << std::endl

kanze
Le #737141
"Michel Michaud" news:
Dans news:,
"Michel Michaud" news:
Dans news:c4r70l$9gb$,
Quelqu'un sait-il comment faire pour remplacer tous les
formattages %x.x?


Par exemple pour %8.8x, une fois pour toute :

... << right << setfill('0') << hex

puis
... << setw(8) << laValeur ...


Maintenant, pour %8.6x, comment fais-tu ?


Ce n'est ce qu'il demandait (%x.x).


Mais ce qu'il démandait s'écrit la plupart du temps %08x en C, non
%8.8x. J'ai donc supposé un problème plus général.

Si tu veux dire qu'il y a des choses difficiles à faire avec les
manipulateurs, alors qu'elles sont faciles avec printf et compagnie,
c'est vrai, mais l'inverse est vrai aussi.


À vrai dire, mon point était plutôt qu'avec GB_Format, on pouvait faire
*tout* ce qu'on fait avec printf, tout en restant en C++, avec la
sécurité des types et les possibilités de définir des formattages pour
les types utilisateur (des operator<<) et des destinations nouvelles
(des dérivations de streambuf).

Comment fais-tu ceci avec printf ?

cout << dec << setw(12) << setfill('_') << internal << -123;

Qui donne

-________123


Tu n'as pas besoin de chercher aussi loin. Comment sortir un type
std::complex avec printf ? Ou n'importe quel type défini par
l'utilisateur ? Vers un socket, de préférence.

Tu n'as pas besoin de me convaincre des limitations de printf.

Tu me diras que ce n'est pas très utile, mais je crois que %8.6x non
plus !


Je ne sais pas. Il correspond bien à des « PIC ##999999 » de Cobol ou
des « USING "##999999" » de Basic. C-à-d que dans certaines applications
commerciales, peut-être...

En fait, j'ai surtout vue ce genre de chose avec des décimaux à virule
flottant, du genre « PIC ##999.99 ». Ce qui n'est possible ni avec
printf ni avec iostream. Mais étant donné qu'il n'y a pas de type
revenir à l'utilité, je crois que quelque chose du genre :

std::cout
<< std::left << std::setfill( '.' )
<< std::setw( 40 ) << std::string( title[ i ] ) + ' '
<< std::right << std::setfill( ' ' ) << std::setw( 2 ) << page[ i ]
<< 'n' ;

n'est pas sans utilité. (Mais si j'en avais besoin, j'avoue que je
créerais des manipulateurs propres, du genre ToCLabel et ToCPageNumber,
afin de pouvoir écrire :

std::cout
<< ToCLabel( 40 ) << title[ i ]
<< ToCPageNumber( 2 ) << page[ i ]
<< 'n' ;

AMHA, c'est bien plus lisible, et en dérivant de GB_StateSavingManip, ce
n'est vraiment que peu de code.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




kanze
Le #737140
"Amerio" news:
Plotark wrote:

J'aimerais ecrire en c++ l'equivalent de
printf("%8.8x-%4.4x-%4.4x-%2.2x%2.2x-", u.time_low,
u.time_mid,u.time_hi_and_version,
u.clock_seq_hi_and_reserved,u.clock_seq_low);

Je suis sous visual c++.

Quelqu'un sait-il comment faire pour remplacer tous les formattages
%x.x?


Si tu veux garder la même syntaxe, il y a boost::format qui accepte
les même entrées que printf.


Tu en es sûr. Il me semblait qu'il y en avait qu'il ne comprenait pas,
et que la précision sur un entier en était un. (Je ne suis pas sûr. je
ne l'ai pas sous la main pour vérifier.)

GB_Format les accepte. Mais j'avoue que la décision de les supporter
revient plutôt d'une relevé d'un défi que d'une décision consciente de
leur nécessité ou de leur utilité.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Publicité
Poster une réponse
Anonyme