C语言-大小端序的详解

Python021

C语言-大小端序的详解,第1张

地址------------>高地址

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(大部分机器)

作用是,加深理解一些程序的储存与出错原因,然后对于位域的整体赋值有较好考虑。