¿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};
>
davy.ai
El problema de usar
sizeof()
en arrays comoraw_instr
es que te dará el tamaño en bytes de todo el array, no el número de elementos en el array. Ya queraw_instr
es un array deunsigned 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)
porsizeof(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:Esto te dará el número de elementos en el array
raw_instr
, que es 5 en el caso del arrayinst1
proporcionado.