Xin chào Tôi đang cố gắng đọc một mảng byte vào một cấu trúc và các byte sắp ra theo thứ tự ngược lại (theo cách tôi mong đợi). Ai đó có thể giúp tôi hiểu điều gì đang xảy ra không?cấu trúc c và thiết lập byte/đặt hàng
unsigned char buf[] = {
0x11, 0x22, 0x33, 0x44,
0x55, 0x66, 0x77, 0x88,
0x99, 0xaa, 0xbb, 0xcc
};
typedef struct mystruct {
uint16_t var1;
uint16_t var2;
uint32_t var3;
uint32_t var4;
} something;
int main(int argc,char **argv){
printf("sizeof buf: %lu %d \n",sizeof(buf),sizeof(something));
something *st = (something*)&(buf[0]);
#define pr(a) printf(#a" %x\n",a)
pr(st->var1);
pr(st->var2);
pr(st->var3);
pr(st->var4);
return(0);
}
Output:
sizeof buf: 12 12
st->var1 2211
st->var2 4433
st->var3 88776655
st->var4 ccbbaa99
Tôi đã chờ đợi một cái gì đó như: st-> var1 1122
Việc làm này cũng dường như đầu ra điều tương tự?
memcpy(&st->var1,buf,2);
pr(st->var1);
đầu ra: st-> var1 2211
x86/Linux server, gcc phiên bản 4.5.3 (nếu điều đó giúp)
Nhờ sự giúp đỡ của bạn.
Bạn có thể muốn đọc về tính xác thực.Bạn có thể làm điều này ở đây http://en.wikipedia.org/wiki/Endianness chẳng hạn. – alk