0x12 | 0x34 | 0x56 | 0x78
低地址------------->高地址
0x78 | 0x56 | 0x34 | 0x12
高地址
-----------
buf[3] (0x78) ->低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) ->高位
-----------
低地址
高地址
-----------
buf[3] (0x12) ->低位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) ->高位
-----------
低地址
在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100。且x的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。[1]
而存储地址内的排列则有两个通用规则。一个多位的整数将按照其存储地址的最低或最高字节排列。如果最低有效位在最高有效位的前面,则称小端序;反之则称大端序。在网络应用中,字节序是一个必须被考虑的因素,因为不同机器类型可能采用不同标准的字节序,所以均按照网络标准转化。
对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。
对于多字节数据,如整数(32位机中一般占4字节),在不同的处理器的存放方式主要有两种,以内存中0x0A0B0C0D的存放方式为例,分别有以下几种方式:
示例中,最高位字节是0x0A 存储在最低的内存地址处。下一个字节0x0B存在后面的地址处。正类似于十六进制字节从左到右的阅读顺序。
最高的16bit单元0x0A0B存储在低位。
最低位字节是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。
最低的16bit单元0x0D0C存储在低位。
当更改地址的增长方向,使之由右至左时,表格更具有可阅读性。
最低有效位(LSB)是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。
最低的16bit单元0x0C0D存储在低位。
具体概念去百度吧,少年。不过举个栗子,short a = 0xF0F0;
假设左侧都是物理地址的高地址那么这个数据储存,
大端是:0F0F(IBM等)
小端是:F0F0(大部分机器)
作用是,加深理解一些程序的储存与出错原因,然后对于位域的整体赋值有较好考虑。