位域和字节序的关系
时间:2007-03-27 来源:kuaizaifeng
#include <stdio.h> int main() { char* c; struct bitfield { int ia:3; int ib:2; int ic:3; } field; field.ia=4; field.ib=2; field.ic=2; c=(char *) &field; printf("%0x\n",*c); printf("%d\n",*c); struct st { char c1; char c2; short c3; int c4; } srt; srt.c1 = 1; srt.c2 = 2; srt.c3 = 255; srt.c4 = 0xddccbbaa; unsigned char *tmp = &srt; int i = 0; for (i = 0; i < 8; i++) printf("%0x\t", *(tmp+i)); printf("\n"); return 0; } |
int a1:3;
int a2:2;
int a3:3;
}bitfield;
这样的位域定义中,不管机器的字节序,总是先定义的域占据MSB,而后定义的域占据LSB.
所以这里从MSB到LSB分别是:
MSB a1: 100
a2: 10
LSB a3: 010
这样,在小端系统里,低地址存放LSB,高地址存放MSB。
于是内存里是 0101 0100,以十六进制打印出来是0x54
在大端系统里,低地址存放MSB,高地址存放LSB。
于是内存里是 1001 0010,以十六进制打印出来是0x92
相关阅读 更多 +