¿Cómo convertir Hex a Ascii en C con y sin usar sprintf?

Utilicé strtol para convertir una cadena a hexadecimal, ahora necesito imprimirla en la pantalla. No estoy seguro de poder usar sprintf ya que solo tengo 20k de memoria para usar en esta placa. Alternativas bienvenidas.

Para hacer esto manualmente, la forma más fácil es tener una tabla que asigne nybbles a ASCII:

 static const char nybble_chars[] = "0123456789ABCDEF"; 

Luego, para convertir un byte en 2 caracteres hexadecimales (suponiendo que el unsigned char es la mejor representación para un byte, pero sin hacer suposiciones sobre su tamaño) extraiga cada nybble y obtenga el carácter para él:

 void get_byte_hex( unsigned char b, char *ch1, char *ch2 ) { *ch1 = nybble_chars[ ( b >> 4 ) & 0x0F ]; *ch2 = nybble_chars[ b & 0x0F ]; } 

Esto se extiende directamente a tipos de datos más amplios, y debe generar código razonablemente conciso en una amplia gama de architectures.

Consulte los códigos de formato , si su implementación de C lo admite, debería ser fácil imprimir valores en hexadecimal.

Compruebe su biblioteca de C para ltoa – el inverso de strtol . O, escríbelo desde cero (ver la respuesta de brone).