Convertir ASCII representado HEX en HEX

1

Tengo una pregunta que no pude resolver pero me pareció trivial. Obtengo una secuencia de caracteres de un procesador a través de UART y esta secuencia representa un archivo JPEG.

Capturé esta secuencia, como file.txt y puedo abrirla en el bloc de notas (por ejemplo) y ver FFD8 ... muchos datos ... FFD9. FFD8 y FFD9 son códigos de inicio de imagen y fin de imagen JPEG y los datos intermedios son probablemente la imagen jpeg. Quiero ver esta imagen, pero el problema es que estos datos representan caracteres HEX (por ejemplo, FFD8), pero al ser un archivo de texto, en realidad es solo ASCII y, por lo tanto, no puedo abrirlo como JPEG.

¿Existe un programa o una utilidad que me permita convertir este archivo que contiene "ASCII HEX" a binario real para poder verlo como un archivo jpeg?

¡Gracias!

    
pregunta IgorEE

2 respuestas

2

Primero necesitará una subrutina corta para convertir cada nibble hexadecimal de 4 bits en binario, y luego guardar los nibbles como valores binarios de 8 bits.

unsigned char hextobin (unsigned char digit)
{
    unsigned char value;

    if ((toupper(digit) >= 'A')&&(toupper(digit) <= 'F'))
    {
        value = (digit - 'A') + 10;
    }
    else if ((digit >= '0') && (digit <= '9'))
    {
         value = digit - '0';
    }
    else
    {
         value = 255;    // error - not handling this below
    }
    return value;
}

Luego, por cada dos caracteres hexadecimales, llama a la rutina anterior dos veces; por ejemplo, si los ingresa en un bucle, algo como esto:

    unsigned char nibble1, nibble2, byte;

// assume inside a loop getting a characters from UART

{

    nibble1 = gethexchar();    // ssume gets one ASCII char 0-9 or A-F
    nibble2 = gethexchar();

    byte = 256 * hextobin(nibble1) + hextobin(nibble2);

    // can save byte off to buffer or write to file
}
    
respondido por el tcrosley
2

Encontré una forma fácil de hacer esto, aunque la respuesta anterior de tcrosley también es correcta.

Mi forma era cambiar el código en el microprocesador para generar los datos con un especificador de formato% c en lugar del especificador de formato% x originalmente utilizado.

Luego capturo los datos usando RealTerm en un archivo.

Luego abro el archivo con un editor HEX (hexplorer) para verificar que comienza con FFD8 y termina con FFD9 (generalmente tengo que eliminar algunos caracteres del final del archivo, esto se agrega debido a cómo el firmware envía expediente).

Luego renombro el archivo a la extensión jpg y se puede abrir con cualquier software de visualización de imágenes.

¡Gracias por la ayuda a todos!

    
respondido por el IgorEE

Lea otras preguntas en las etiquetas