字节序--小端大端

来源:互联网 发布:中国宏观经济数据8月 编辑:程序博客网 时间:2024/06/11 20:59

 

字节序

a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,Intel386   体系结构用的是littleendian
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,sunSparc体系结构用的是bigendian
c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

C程序映像中内存的空间布局情况

----------------------- 最高内存地址 0xffffffff
 | 栈底
 .
 .              栈
 .
  栈顶
-----------------------
 |
 |
/|/

NULL (空洞) 

/|/
 |
 |
-----------------------
                堆
-----------------------
未初始化的数据
----------------(统称数据段)
初始化的数据
-----------------------
正文段(代码段)
----------------------- 最低内存地址 0x00000000

以unsigned int value = 0x12345678为例

Big-Endian: 低地址存放高位,如下图:
栈底 (高地址)
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
栈顶 (低地址)

Little-Endian: 低地址存放低位,如下图:
栈底 (高地址)
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
---------------
栈顶 (低地址)