C++ cout valores hexadecimales?

3 minutos de lectura

Quiero hacer:

int a = 255; 
cout << a;

y hacer que muestre FF en la salida, ¿cómo haría esto?

C cout valores
greg hewgill

Utilizar:

#include <iostream>

...

std::cout << std::hex << a;

Hay muchas otras opciones para controlar el formato exacto del número de salidacomo ceros a la izquierda y mayúsculas/minúsculas.

  • Esto parece cambiar toda la salida futura de cout a hexadecimal; entonces, si solo desea que ‘a’ se imprima en hexadecimal, es posible que desee algo como cout << hex << a << dec; para volver a cambiarlo.

    – ShreevatsaR

    9 de marzo de 2012 a las 10:00

  • @ShreevatsaR Un problema con la restauración de dec sobre hexadecimal es que es posible que dec no haya sido el valor establecido previamente, especialmente si está escribiendo un método de biblioteca genérico. Esta pregunta tiene algunas respuestas sobre cómo almacenar y restaurar el estado. Puede guardar el estado con ios::fmtflags f(cout.flags()); y restaurarlo con out.flags(f);.

    – jtpereyda

    8 de enero de 2015 a las 0:09


  • Luego restaurar por std::cout.flags(f);

    – campo propio

    14 de marzo de 2020 a las 9:30

1646751432 712 C cout valores
Benoît

std::hex se define en <ios> que está incluido por <iostream>. Pero usar cosas como std::setprecision/std::setw/std::setfill/etc tienes que incluir <iomanip>.

Para manipular la secuencia para imprimir en hexadecimal, use el hex manipulador:

cout << hex << a;

De forma predeterminada, los caracteres hexadecimales se muestran en minúsculas. Para cambiarlo a mayúsculas utilice el uppercase manipulador:

cout << hex << uppercase << a;

Para cambiar más tarde la salida a minúsculas, use el nouppercase manipulador:

cout << nouppercase << b;

  • Es nouppercase va a cambiar la salida de nuevo a decimal?

    – Corazón

    1 de febrero de 2019 a las 7:21

  • Solo para agregar una nota miscelánea, el fragmento anterior no hará que una entrada “manzana” se convierta en “MANZANA”.

    – campo propio

    14 de marzo de 2020 a las 9:44

C cout valores
Yoav

Si desea imprimir un solo número hexadecimal y luego volver a decimal, puede usar esto:

std::cout << std::hex << num << std::dec << std::endl;

1646751434 139 C cout valores
jtpereyda

std::hex obtiene el formato hexadecimal, pero es una opción con estado, lo que significa que debe guardar y restaurar el estado o afectará todos los resultados futuros.

Cambiando ingenuamente de nuevo a std::dec solo es bueno si ahí es donde estaban antes las banderas, lo que puede no ser el caso, especialmente si está escribiendo una biblioteca.

#include <iostream>
#include <ios>

...

std::ios_base::fmtflags f( cout.flags() );  // save flags state
std::cout << std::hex << a;
cout.flags( f );  // restore flags state

Esto combina la respuesta de Greg Hewgill y la información de otra pregunta.

Entiendo que esto no es lo que pidió OP, pero sigo pensando que vale la pena señalar cómo hacerlo con printf. Casi siempre prefiero usarlo sobre std::cout (incluso sin experiencia previa en C).

printf("%.2X", a);

‘2’ define la precisión, ‘X’ o ‘x’ define el caso.

1646751435 799 C cout valores
Gaurav

También hay diferentes tipos de banderas y máscaras que puedes usar. Consulte http://www.cplusplus.com/reference/iostream/ios_base/setf/ para más información.

#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;
}

  • Creo que el comportamiento de este código no está definido. El setf borra los bits de ios::basefield, incluido ios::dec (predeterminado para flujos estándar), y establece solo ios::hex. Cuando ios::hex está desarmado, cada bit en ios::basefield está desarmado. ¿Cómo se num imprimió la segunda vez? evidencia de que todos los bits están desarmados: ideone.com/fYXyh6. Esto está permitido para ios::floatfield según Thinking in C++ vol 2 página 189, pero no dice lo mismo sobre ios::basefield.

    – Joel Sjogren

    21 de julio de 2013 a las 15:14


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad