¿Cómo dar salida a un personaje como un número entero a través de cout?

#include  using namespace std; int main() { char c1 = 0xab; signed char c2 = 0xcd; unsigned char c3 = 0xef; cout << hex; cout << c1 << endl; cout << c2 << endl; cout << c3 << endl; } 

Esperaba que la salida fuera la siguiente:

 ab cd ef 

Sin embargo, no tengo nada.

Supongo que esto se debe a que cout siempre trata a ‘char’, ‘signed char’ y ‘unsigned char’ como caracteres en lugar de enteros de 8 bits. Sin embargo, ‘char’, ‘signed char’ y ‘unsigned char’ son todos tipos integrales.

Entonces mi pregunta es: ¿cómo dar salida a un personaje como un número entero a través de cout?

PD: static_cast (…) es feo y necesita más trabajo para recortar bits adicionales.

 char a = 0xab; cout < < +a; // promotes a to a type printable as a number, regardless of type. 

Esto funciona siempre que el tipo proporcione un operador unario con semántica ordinaria. Si está definiendo una clase que representa un número, para proporcionar un operador unario + con semántica canónica, cree un operator+() que simplemente devuelva *this bien por valor o por referencia-a-const.

fuente: Parashift.com - ¿Cómo puedo imprimir un char como un número? ¿Cómo puedo imprimir un carácter * para que el resultado muestre el valor numérico del puntero?

Cámbialos a un tipo entero, (¡y máscara de bits apropiadamente!), Es decir:

 #include  using namespace std; int main() { char c1 = 0xab; signed char c2 = 0xcd; unsigned char c3 = 0xef; cout < < hex; cout << (static_cast(c1) & 0xFF) < < endl; cout << (static_cast(c2) & 0xFF) < < endl; cout << (static_cast(c3) & 0xFF) < < endl; } 

Tal vez esto:

 char c = 0xab; std::cout < < (int)c; 

Espero eso ayude.

Otra forma de hacerlo es con std :: hex aparte de casting (int) :

 std::cout < < std::hex << (int)myVar << std::endl; 

Espero que ayude.