OVH Cloud OVH Cloud

[debutant] formatage suite

4 réponses
Avatar
pasde.bcausse.spam
bonsoir, comment formater un nombre hex avec sont prefixe (showbase) en
largeur (setw) constante avec les zeros (si necessaire).

ex 0x0008759ABF0125BC

merci.

--
Bruno Causse
http://perso.wanadoo.fr/othello

4 réponses

Avatar
Richard Delorme
bonsoir, comment formater un nombre hex avec sont prefixe (showbase) en
largeur (setw) constante avec les zeros (si necessaire).

ex 0x0008759ABF0125BC


Sans utiliser showbase...

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
unsigned long long n = 0x0008759ABF0125BCLL;
cout << "0x" << hex << setw(16) << setfill('0') << n << endl;
return 0;
}


--
Richard

Avatar
Bruno CAUSSE
dans l'article 42b9e07e$0$309$, Richard
Delorme à a écrit le 23/06/05 0:04 :

bonsoir, comment formater un nombre hex avec sont prefixe (showbase) en
largeur (setw) constante avec les zeros (si necessaire).

ex 0x0008759ABF0125BC


Sans utiliser showbase...


Oui, ca je sais faire :-)


Avatar
kanze
Bruno Causse wrote:
comment formater un nombre hex avec sont prefixe (showbase) en
largeur (setw) constante avec les zeros (si necessaire).

ex 0x0008759ABF0125BC


std::cout << std::setfill( '0' )
<< std::hex
<< std::showbase
<< std::internal
<< std::setw( 16 )
<< i ;

La clé, c'est qu'il faut utilise la justification « internal »,
exactement comme quand on précise un fill de '0' avec une valeur
signée.

Du constructeur de mon manipulateur Gabi::HexFmt :

myFlags &= ~ std::ios::basefield ;
myFlags |= std::ios::hex ;
if ( isdigit( static_cast< unsigned char >( fill ) )
&& (myFlags & std::ios::adjustfield) == 0 ) {
myFlags |= std::ios::internal ;
}

Mais du code semblable se trouve dans les constructeurs de tous
mes manipulateurs.

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

Avatar
pasde.bcausse.spam
wrote:

std::cout << std::setfill( '0' )
<< std::hex
<< std::showbase
<< std::internal
<< std::setw( 16 )


18 0x compte pour 2 digits

<< i ;

La clé, c'est qu'il faut utilise la justification « internal »,
exactement comme quand on précise un fill de '0' avec une valeur
signée.


merci.

remarque sans importance dans le cas ou i = 0, 0x est omis curieux.
--
Bruno Causse
http://perso.wanadoo.fr/othello