web-dev-qa-db-fra.com

C ++ cout hex valeurs?

Je veux faire:

int a = 255; 
cout << a;

et lui montrer FF dans la sortie, comment pourrais-je le faire?

132
user34537

Utilisation:

#include <iostream>

...

std::cout << std::hex << a;

Il existe de nombreuses autres options permettant de contrôler le formatage exact du numéro de sortie , telles que les zéros au début et les majuscules/minuscules.

183
Greg Hewgill

std::hex est défini dans <ios> qui est inclus par <iostream>. Mais pour utiliser des choses comme std::setprecision/std::setw/std::setfill/etc vous devez inclure <iomanip>.

41
Benoît

Pour manipuler le flux à imprimer en hexadécimal, utilisez le manipulateur hex:

cout << hex << a;

Par défaut, les caractères hexadécimaux sont affichés en minuscules. Pour le changer en majuscule, utilisez le manipulateur uppercase:

cout << hex << uppercase << a;

Pour remettre ultérieurement la sortie en minuscule, utilisez le manipulateur nouppercase:

cout << nouppercase << b;
37
Ashwin Nanjappa

Si vous souhaitez imprimer un seul nombre hexadécimal, puis revenir en décimal, vous pouvez utiliser ceci:

std::cout << std::hex << num << std::dec << std::endl;
16
Ben-Uri

Vous pouvez également utiliser différents types de drapeaux et de masques. Veuillez vous référer à http://www.cplusplus.com/reference/iostream/ios_base/setf/ pour plus d'informations.

#include <iostream>
using namespace std;

int main()
{
    int num = 255;
    cout.setf(ios::hex, ios::basefield);
    cout << "Hex: " << num << endl;

    cout.unsetf(ios::hex);
    cout << "Original format: " << num << endl;

    return 0;
}
10
Gaurav

Je comprends que ce n’est pas ce que demande OP, mais je pense toujours qu’il vaut la peine de préciser comment le faire avec printf. Je préfère presque toujours l'utiliser sur std :: cout (même sans fond C précédent).

printf("%.2X", a);

'2' définit la précision, 'X' ou 'x' définit la casse.

9
Daniel Sloof

std::hex vous obtient le formatage hexadécimal, mais il s'agit d'une option avec état, ce qui signifie que vous devez enregistrer et restaurer l'état, sinon cela aura une incidence sur toutes les sorties futures.

Revenir naïvement à std::dec n'est utile que si les drapeaux se trouvaient avant, ce qui n'est peut-être pas le cas, en particulier si vous écrivez une bibliothèque.

#include <iostream>
#include <ios>

...

std::ios_base::fmtflags f( cout.flags() );  // save flags state
std::cout << std::hex << a;
cout.flags( f );  // restore flags state

Cela combine la réponse de Greg Hewgill et les informations de autre question .

5
jtpereyda