什么是大端序和小端序
给定一个32位整数0x1234abcd
,在内存里是怎么存放的呢?
假定存放这个整数的内存起始地址是0x0001,那么内存中存放这个整数有两个可能:
|0x0001|0x0002|0x0003|0x0004|
| 12 | 34 | ab | cd |
或者:
|0x0001|0x0002|0x0003|0x0004|
| cd | ab | 34 | 12 |
第一种情况是高位字节在前,叫做大端序(big-endian)。
第二种情况是低位字节在前,叫做小端序(little-endian)。
不同的CPU架构有不同的选择,有的使用大端序存放整型、长整型;有的使用小端序存放整型、长整型。
x86架构的CPU都使用小端序,即低位字节放在前面。而POWER PC使用大端序。
一个整型数在网络中传输时,也有字节排序的问题。这是个约定俗成的问题。网络字节序就是big-endian,即排在前面的字节是高位字节。
大端序和小端序的判断
怎么判断自己使用的机器是大端序还是小端序呢?使用下面的C程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 1;
char *p = (char*)&i;
if(p[0] == 1) {
printf("little endian\n");
}
else {
printf("big endian\n");
}
return 0;
}
原理是取整型数1的第一个字节。如果是小端序存放,即低位字节在前,那这个字节的值一定是1;否则是0。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。