¿Cómo generar un carácter como un 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 la salida fuera la siguiente:

ab
cd
ef

Sin embargo, no tengo nada.

Supongo que esto se debe a que cout siempre trata '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 generar un carácter como un entero a través de cout?

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta