不同的平台,使用的大小端可能不同,可以使用程序来判断一下,比如在我的Ubuntu虚拟机上运行如下程序:
#include <stdio.h>
typedef struct {
int a;
int b;
int c;
} Foo_Type;
int main()
{
Foo_Type bar;
bar.a = 1;
bar.b = 2;
bar.c = 3;
int * p = (int*)&bar;
printf("%d %d %d\n", p[0],p[1],p[2]);
bar.a = 0x12345678;
printf("0x%X\n", bar.a);
unsigned char * pc = (unsigned char*)&bar;
printf("0x%X 0x%X 0x%X 0x%X\n", pc[0], pc[1], pc[2], pc[3]);
return 0;
}
$ gcc -o test main.c
$ ./test
1 2 3
0x12345678
0x78 0x56 0x34 0x12
首先看到,结构体里的成员,其存放地址,是按照声明的顺序挨个排列的,由低地址到高地址。
然后我们在一个整型中存放数据,4个字节的int类型,从低地址开始打印数据,其存放的是低位的数字。
第一个字节存放的0x78,这是整数0x12345678的最低有效位的数字。
所以这个环境下就是小端的,little endian。
在字节内部,就没有顺序了,0x78放到8个bit里,怎么放怎么读都是一样的。