计算机的基本存储单元是8位单字节。
多字节数据,如4字节的整型数据如何存储的呢? 是高位在内存高字节?还是低位在内存高字节?即字节是按如何顺序存放的?也就是所谓的字节序,按照存放顺序分为大端序(Big-endian)和小端序(Little-endian)。
内存地址访问是由低地址到高地址方向进行的。
大端序(Big-endian):
高位在内存低地址,即顺着内存的地址增长方向,是先放高位数据,再放低位数据。如0x12345678,在内存中存放依次是:12 34 56 78,这种字节序符合我们的阅读习惯。
小端序(Little-endian):
低位在内存低地址,即顺着内存的地址增长方向,是先放低位数据,再放高位数据。如0x12345678,在内存中存放依次是:78 56 34 12。通常ARM嵌入式产品用的是小端序。
网络序,采用的是大端序,符合人们的阅读习惯,不管什么主机在进行网络通信时,一律要转换成标准的网络序(htons、htonl函数)。
/* 编程确定主机是何种字节序 */
/* 返回:0 大端序;1 小端序 */
char is_little_endian()
{
int a=1; //高位是0 低位是1
return *(char*)&a; //取第一字节数据返回
}
PS:不同主机cpu采用的字节序可能不统一,有的是大端,有的是小端,假如统一标准,字节序的问题也就不存在了。