Vermeiden Sie die Makros, wenn Sie können! Sie verstecken Code, machen es schwer zu debuggen, respektieren den Gültigkeitsbereich usw.
Sie können eine einfache Funktion verwenden, wie KenE bereitgestellt. Wenn Sie alle Lust und flexibel erhalten möchten, dann können Sie Ihre eigenen Manipulator schreiben:
#include <iostream>
#include <iomanip>
using namespace std;
ostream& hex4(ostream& out)
{
return out << "0x" << hex << setw(4) << setfill('0');
}
int main()
{
cout << hex4 << 123 << endl;
}
Dieses es allgemeinere etwas macht. Der Grund für die obige Funktion ist, dass operator<<
bereits wie folgt überladen ist: ostream& operator<<(ostream&, ostream& (*funtion_ptr)(ostream&))
. endl
und einige andere Manipulatoren sind ebenfalls so implementiert.
Wenn Sie die Anzahl der Stellen zulassen mögen zur Laufzeit festgelegt werden, wir eine Klasse verwenden können:
#include <iostream>
#include <iomanip>
using namespace std;
struct formatted_hex
{
unsigned int n;
explicit formatted_hex(unsigned int in): n(in) {}
};
ostream& operator<<(ostream& out, const formatted_hex& fh)
{
return out << "0x" << hex << setw(fh.n) << setfill('0');
}
int main()
{
cout << formatted_hex(4) << 123 << endl;
}
Wenn die Größe kann jedoch bei der Kompilierung-Zeit bestimmt werden, könnte genauso gut einfach nutzen eine Funktion template [dank Jon Purdy für diesen Vorschlag]:
template <unsigned int N>
ostream& formatted_hex(ostream& out)
{
return out << "0x" << hex << setw(N) << setfill('0');
}
int main()
{
cout << formatted_hex<4> << 123 << endl;
}
Auftrieb hat ein Ausgabeformat Bibliothek: siehe http://stackoverflow.com/questions/119098/which-io-library-do-you-use -in-your-c-code/119194 # 119194 –