es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convirtiendo una matriz de caracteres hexadecimal en una matriz de caracteres ASCII

¿Existe alguna función que pueda convertir una matriz de caracteres hexadecimales a una matriz de caracteres ASCII, algo así:

char array_input[] = "48656C6C6F3"; // Secuencia hex
char array_output[] = "Hello";      // Salida ASCII

y que pueda aceptar secuencias de entrada que contengan más de 300 letras.

Algo como:

char array_input[] = "08010000013feb55f000000000000f74000f0ea850209a690000940000120000001e09010002000300040016014703f0001504c8000c0900730a00460b00501300464306d7440000b5000bb60007422e9f180000cd0386ce000107c700000000f10000601a46000001344800000bb84900000bb84a00000bb84c00000000024e0000000000000000cf000001";
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una función en C que puede convertir una matriz de caracteres hexadecimales en una matriz de caracteres ASCII. Es la función sscanf(), que se puede utilizar para leer una entrada formateada desde una cadena. Se puede utilizar para convertir una cadena hexadecimal en su correspondiente cadena ASCII.

    Aquí hay un ejemplo de código que muestra cómo utilizar sscanf() para convertir una matriz de caracteres hexadecimales en una matriz de caracteres ASCII:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char hex_input[] = "48656C6C6F"; // Cadena hexadecimal de entrada
        char ascii_output[20]; // Cadena ASCII de salida (debe ser lo suficientemente grande para contener la cadena convertida)
    
        // Utilizar sscanf para convertir de hexadecimal a ASCII
        int j = 0;
        for (int i = 0; i < strlen(hex_input); i += 2) {
            unsigned int byte;
            sscanf(hex_input + i, "%2x", &byte);
            ascii_output[j++] = (char)byte;
        }
        ascii_output[j] = '\0'; // Agregar el terminador nulo al final de la cadena
    
        printf("%s\n", ascii_output); // Imprimir la salida (debería ser "Hello")
    
        return 0;
    }
    

    Este fragmento de código convierte la cadena de entrada hexadecimal “48656C6C6F” en su equivalente ASCII “Hello”. Ten en cuenta que la matriz de caracteres ASCII de salida debe ser lo suficientemente grande para contener la cadena convertida, de lo contrario, podrías obtener errores de desbordamiento de búfer.

    sscanf() también se puede utilizar para convertir secuencias de entrada hexadecimal más largas, como en el siguiente ejemplo:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char hex_input[] = "08010000013feb55f000000000000f74000f0ea850209a690000940000120000001e09010002000300040016014703f0001504c8000c0900730a00460b00501300464306d7440000b5000bb60007422e9f180000cd0386ce000107c700000000f10000601a46000001344800000bb84900000bb84a00000bb84c00000000024e0000000000000000cf000001"; // Cadena hexadecimal de entrada
        char ascii_output[1200]; // Cadena ASCII de salida (debe ser lo suficientemente grande para contener la cadena convertida)
    
        // Utilizar sscanf para convertir de hexadecimal a ASCII
        int j = 0;
        for (int i = 0; i < strlen(hex_input); i += 2) {
            unsigned int byte;
            sscanf(hex_input + i, "%2x", &byte);
            ascii_output[j++] = (char)byte;
        }
        ascii_output[j] = '\0'; // Agregar el terminador nulo al final de la cadena
    
        printf("%s\n", ascii_output); // Imprimir la salida
    
        return 0;
    }
    

    Este fragmento de código convierte la larga secuencia de entrada hexadecimal en su correspondiente cadena ASCII. Nuevamente, ten en cuenta que la matriz de caracteres ASCII de salida debe ser lo suficientemente grande para contener la cadena convertida o podría resultar en errores de desbordamiento de búfer.</string.h></stdio.h></string.h></stdio.h>

Comments are closed.