Pregunta
Estoy tratando de generar el valor hexadecimal de un carácter y formatearlo de una manera agradable.
Requerido: 0x01 : value 0x1
Todo lo que puedo obtener es: 00x1 : value 0x1
// o 0x1 si no uso iomanip
Aquí está el código que tengo, 'ch' fue declarado como un carácter sin firmar. ¿Hay alguna otra forma de hacerlo que no sea verificar el valor y agregar manualmente un '0'?
cout << showbase;
cout << hex << setw(2) << setfill('0') << (int) ch;
Editar:
Encontré una solución en línea:
cout << internal << setw(4) << setfill('0') << hex << (int) ch
Solución
std::cout << "0x" << std::noshowbase << std::hex << std::setw(2) << std::setfill('0') << (int)ch;
Dado que setw
se desplaza a la izquierda del número impreso general (después de aplicar showbase
), <=> no se puede utilizar en su caso. En su lugar, imprima manualmente la base como se muestra arriba.
Otros consejos
En uno de mis proyectos hice esto:
ostream &operator<<(ostream &stream, byte value)
{
stream << "0x" << hex << (int)value;
return stream;
}
Superé al operador < < para la salida de flujo, y todo lo que era un byte se mostró en hexadecimal. byte es un typedef para unsigned char.