1. 字节序

计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)

  • Big endian:高位字节数据存放在低地址处,低位数据存放在高地址处,俗称大端
  • Little endian:高位字节数据存放在高地址处,低位数据存放在低地址处,俗称小端
  • 通常只有读取的时候,才必须区分字节序,其他情况都不用考虑

1.1. 高低地址

  • 栈顶 (低地址)
  • 栈底 (高地址)

1.2. 高低字节

  • 在十进制中我们都说靠 左边的是高位,靠右边的是低位,在其他进制也是如此。就拿 0x12345678 来说,从高位到低位的字节依次是 0x12、0x34、0x56 和 0x78。
  • 0x12 -> 16 进制 对应二进制(0b10010) -> 00001【1】 0010【2】 (1 化 4)
===== 大端 =====
--------------------
栈顶 (低地址)
--------------------|    入栈方向 ,地址增长方向
0x12 -- 高位        |      ||
0x34 -- 低位        |      ||
0x56 -- 低位        |      ||
0x78 -- 低位        |      ||
--------------------|      V
栈底(高地址)
--------------------|

===== 小端 =====
--------------------
栈顶 (低地址)
--------------------|    入栈方向 ,地址增长方向
0x78 -- 低位        |      ||
0x56 -- 低位        |      ||
0x34 -- 低位        |      ||
0x12 -- 高位        |      ||
--------------------|      V
栈底(高地址)
--------------------|

1.3. 网络字节序 && 大段字节序

  • 网络字节序,是指网络传输的字节序,可能是大端序或者小端序,取决于软件开始时通讯双方的协议规定。 TCP/IP 协议 RFC1700 规定使用“大端”字节序为网络字节序,开发的时候需要遵守这一规则。
例 0x0806 存储
--------------------
栈顶 (低地址)
--------------------|    入栈方向
0x08 -- 高位        |      ||
0x06 -- 低位        |      ||
--------------------|      V
栈底(高地址)
--------------------|

results matching ""

    No results matching ""