¡Evite las macros cuando pueda! Ocultan código, dificultan la depuración, no respetan el alcance, etc.
Puede usar una función simple como KenE. Si desea obtener toda fantasía y flexible, entonces usted puede escribir su propio manipulador:
#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;
}
Esto hace que sea un poco más general. El motivo por el que se puede utilizar la función anterior es porque operator<<
ya está sobrecargado así: ostream& operator<<(ostream&, ostream& (*funtion_ptr)(ostream&))
. endl
y algunos otros manipuladores también se implementan así.
Si desea permitir que el número de dígitos a ser especificado en tiempo de ejecución, podemos utilizar una clase:
#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;
}
Si el tamaño se puede determinar en tiempo de compilación, sin embargo, puede ser que también acaba de utilizar una plantilla de función [gracias a Jon Purdy para esta sugerencia]:
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;
}
impulso tiene una biblioteca de formato de salida: ver http://stackoverflow.com/questions/119098/which-io-library-do-you-use -in-your-c-code/119194 # 119194 –