字节序有两种表示方法:大端字节序(big ending),小端字节序(little ending)。
网络字节序:采用的是大端字节序。
主机字节序:不同的CPU采用的方法不一样,可以通过代码来查看自己主机的字节序。
大端字节序:高位字节排放在内存低地址端,低位字节排放在内存的高地址端。
小端字节序:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
看一个unsigned short 数据,它占2个字节,给它赋值0x1234。
若采用的大端字节序,则其低地址端应该存放的是0x12;
若采用的小端字节序,则其低地址端应该存放的是0x34;
可以通过联合体来获得其高低地址的数据。
测试主机字节序的代码:
- #include <stdio.h>
- int main()
- {
- union ut
- {
- short s;
- char c[2];
- } u;
- if(sizeof(short) == 2)
- {
- u.s = 0x0102;
- if(u.c[0] == 1 && u.c[1] == 2)
- {
- printf("big enidan\n");
- }
- else if(u.c[0] == 2 && u.c[1] == 1)
- {
- printf("little endian.\n");
- }
- return 0;
- }
- }