Je veux faire:
int a = 255;
cout << a;
et lui montrer FF dans la sortie, comment pourrais-je le faire?
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.
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>
.
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;
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;
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;
}
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.
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 .