Je veux le faire :
int a = 255;
cout << a;
et faire apparaître FF dans la sortie, comment faire ?
Je veux le faire :
int a = 255;
cout << a;
et faire apparaître FF dans la sortie, comment faire ?
Utilisez :
#include <iostream>
...
std::cout << std::hex << a;
Il y a de nombreuses autres options pour contrôler le formatage exact du nombre de sortie comme les zéros non significatifs et les majuscules et minuscules.
Cela semble changer toutes les sorties futures de cout à hex ; donc si vous voulez seulement que 'a' soit imprimé en hex, vous pouvez vouloir quelque chose comme cout << hex << a << dec;
pour le changer à nouveau.
@ShreevatsaR Un problème avec la restauration du dec sur l'hex est que dec peut ne pas avoir été la valeur précédemment définie, en particulier si vous écrivez une méthode de bibliothèque générique. Cette question a quelques réponses sur la façon de stocker et de restaurer l'état. Vous pouvez sauvegarder l'état avec ios::fmtflags f(cout.flags());
et le restaurer avec out.flags(f);
.
Pour manipuler le flux afin de l'imprimer en hexadécimal, utilisez la fonction hex
manipulateur :
cout << hex << a;
Par défaut, les caractères hexadécimaux sont affichés en minuscules. Pour passer en majuscules, utilisez l'option uppercase
manipulateur :
cout << hex << uppercase << a;
Pour revenir ultérieurement aux minuscules, utilisez la commande nouppercase
manipulateur :
cout << nouppercase << b;
Je comprends que ce n'est pas ce que l'OP a demandé, mais je pense quand même que cela vaut la peine de signaler comment le faire avec printf. Je préfère presque toujours l'utiliser plutôt que std::cout (même si je n'ai pas de connaissances préalables en C).
printf("%.2X", a);
2" définit la précision, "X" ou "x" définit la casse.
Il y a depuis longtemps une bataille entre printf et cout. Bien sûr, cout a l'avantage de dériver de ostream et de bénéficier de tous les avantages de l'abstraction. Le C n'a pas de concept d'objets stream et donc printf et fprintf sont deux commandes différentes. Vraiment, cela aurait été bien en C si stdout était un FILE*. Cela aurait rendu les choses plus faciles.
Il existe également différents types de drapeaux et de masques que vous pouvez utiliser. 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 pense que le comportement de ce code est indéfini. Le setf efface les bits de ios::basefield, y compris ios::dec (par défaut pour les flux standard), et active uniquement ios::hex. Lorsque ios::hex est désactivé, chaque bit de ios::basefield est désactivé. Comment le numéro s'imprime-t-il la deuxième fois ? La preuve que les bits sont tous désactivés : ideone.com/fYXyh6 . Ceci est autorisé pour ios::floatfield selon Thinking in C++ vol 2 page 189, mais il n'en est pas de même pour ios::basefield.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.