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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top