¿Cómo generar un carácter como un número entero a través de cout?

Resuelto xmllmx asked hace 11 años • 6 respuestas
#include <iostream>

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 el resultado fuera el siguiente:

ab
cd
ef

Sin embargo, no obtuve nada.

Supongo que esto se debe a que cout siempre trata 'char', 'char' con signo y 'char sin firmar' como caracteres en lugar de enteros de 8 bits. Sin embargo, 'char', 'char con signo' y 'char sin firmar' son todos tipos integrales.

Entonces mi pregunta es: ¿Cómo generar un carácter como un número entero a través de cout?

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

xmllmx avatar Feb 01 '13 17:02 xmllmx
Aceptado
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 una operator+()que simplemente devuelva *thispor valor o por referencia a constante.

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

daniel avatar Feb 09 '2015 16:02 daniel

Conviértalos a un tipo entero (¡y una máscara de bits apropiada!), es decir:

#include <iostream>

using namespace std;

int main()
{  
    char          c1 = 0xab;
    signed char   c2 = 0xcd;
    unsigned char c3 = 0xef;

    cout << hex;
    cout << (static_cast<int>(c1) & 0xFF) << endl;
    cout << (static_cast<int>(c2) & 0xFF) << endl;
    cout << (static_cast<unsigned int>(c3) & 0xFF) << endl;
}
sheu avatar Feb 01 '2013 10:02 sheu

Tal vez esto:

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

Espero eso ayude.

Luka Pivk avatar Feb 01 '2013 10:02 Luka Pivk