Я написал этот кусок кода, где я назначенный беззнаковое целое с двумя различными структурами. На самом деле они одинаковы, но один из них имеет __attribute __ ((упакована)).
#include
#include
struct st1{
unsigned char opcode[3];
unsigned int target;
}__attribute__((packed));
struct st2{
unsigned char opcode[3];
unsigned int target;
};
void proc(void* addr) {
struct st1* varst1 = (struct st1*)addr;
struct st2* varst2 = (struct st2*)addr;
printf(opcode in varst1: %c,%c, %c\n,varst1->opcode[0],varst1->opcode[1],varst1->opcode[2]);
printf(opcode in varst2: %c,%c,%c\n,varst2->opcode[0],varst2->opcode[1],varst2->opcode[2]);
printf(target in varst1: %d\n,varst1->target);
printf(target in varst2: %d\n,varst2->target);
};
int main(int argc,char* argv[]) {
unsigned int* var;
var =(unsigned int*) malloc(sizeof(unsigned int));
*var = 0x11334433;
proc((void*)var);
return 0;
}
Выход:
opcode in varst1: 3,D,3
opcode in varst2: 3,D,3
target in varst1: 17
target in varst2: 0
Учитывая, что я храню это число 0x11334433 == 00010001001100110100010000110011
Я хотел бы знать, почему это выход я получаю.