¿Cómo generar un carácter como un número entero a través de cout?
#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.
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 *this
por 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?
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;
}
Tal vez esto:
char c = 0xab;
std::cout << (int)c;
Espero eso ayude.