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.

¿Cómo puedo obtener un arreglo de tipo unsigned char?

Estoy escribiendo una función que imprimirá en hexadecimal dentro de una matriz de caracteres sin signo. Pero no puedo obtener el tamaño de la matriz. Intenté usar sizeof(), pero parece que imprime el tamaño del tipo, que es 4.

if(raw_instr[0]==0x68){
    printf("%d\n",sizeof(raw_instr));
    for(int i=0; i<sizeof(raw_instr);i++){
        printf("%x ",raw_instr[i]);//espero imprimir 68 10 3f 0 0 pero sólo imprime 68 10 3f 0
    }
    printf("\n");
}

esta es la matriz en la que trabajaré en el bucle.

unsigned char inst1[5] = {0x68,0x10,0x3f,0x00,0x00};
``` printf("%x="" ",raw_instr[i]);//espero="" imprimir="" 68="" 10="" 3f="" 0="" 0="" pero="" sólo="" imprime="" 68="" 10="" 3f="" 0="" }="" printf("\n");="" }="" ```="" esta="" es="" la="" matriz="" en="" la="" que="" trabajaré="" en="" el="" bucle.="" ```="" unsigned="" char="" inst1[5]="{0x68,0x10,0x3f,0x00,0x00};"></sizeof(raw_instr);i++){
        printf("%x ",raw_instr[i]);//espero imprimir 68 10 3f 0 0 pero sólo imprime 68 10 3f 0
    }
    printf("\n");
}

esta es la matriz en la que trabajaré en el bucle.

unsigned char inst1[5] = {0x68,0x10,0x3f,0x00,0x00};>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema de usar sizeof() en arrays como raw_instr es que te dará el tamaño en bytes de todo el array, no el número de elementos en el array. Ya que raw_instr es un array de unsigned char y el tamaño de ese tipo es de 1 byte, sizeof(raw_instr) te dará un resultado de 4 bytes (suponiendo que estás en un sistema de 32 bits).

    Para obtener el número de elementos en el array, puedes dividir sizeof(raw_instr) por sizeof(raw_instr[0]), lo que te dará el tamaño en bytes de todo el array dividido por el tamaño en bytes de cada elemento, resultando en el número de elementos en el array.

    Entonces, para arreglar el código, podrías cambiar la instrucción printf() a:

    printf("%d\n", sizeof(raw_instr)/sizeof(raw_instr[0]));
    

    Esto te dará el número de elementos en el array raw_instr, que es 5 en el caso del array inst1 proporcionado.

Comments are closed.