首先,认识字节(Byte),计算机中Byte意思为“字节”,8个二进制位构成1个"字节(Byte)",即1Byte=8bit,字节是计算机处理数据的基本单位。所谓的大字端(Big Endian)和小字端(Little Endian)就是在存储数据时遵循不同的字节排列顺序,即字节序(Byte Order)不同。
1.含义
Big Endian:按照从低地址到高地址的顺序存放数据的高位字节到低位字节,就是高位数字存储在前面,例如:整数(int)573785173用十六进制表示就是0x22334455,其中“0x”是十六进制的标识符。这个数字有四个字节构成,字节值分别为0x22、0x33、0x44和0x55。在二进制文件中如果是按照大字端(Big Endian)的形式存储,那么在文件中的顺序是这样:0x22、0x33、0x44、0x55,符合人类的正常思维。
其中: 0x22被称为最高有效字节(most significant byte, MSB);
0x55被称为最低有效字节(last significant byte, LSB)。
Little Endian: 按照从低地址到高地址的顺序存放数据的低位字节到高位字节,就是低位数字在前面。同样以上面的数字为例。0x22334455如果按照小字端(Little Endian)的形式存储,那么它的字节值存储顺序为0x55、0x44、0x33、0x22。
2. 二者的对比
整数573785173的16进制表示: 0x22334455
假设存储地址: 0x0155a800 0x0155a801 0x0155a802 0x0155a803
Big Endian法: 0x22 0x33 0x44 0x55
Little Endian: 0x55 0x44 0x33 0x22
3.为什么要有大字端和小字端的区别?
这其实与计算机的环境或CPU有关,对于大部分的CPU来说,字节都是按照Little形式存储的,但是在一些情况下可能是按照Big形式存储的,如在网络上传输数字时。
4、常见字节序
一般操作系统是小端,通讯协议时大端。
CPU字节序。。。
文件字节序。。。
JAVA和网络通信协议使用 Big-Endian编码