oldme 博客

无聊生者不生,即使厌见者不见,为人为己,也还都不错

大端序和小端序

oldme create: 2023-12-16

字节顺序,又称端序或尾序(Endianness),指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。

基本介绍

首先我们设想一个场景:使用编程语言定义了一个整型(int)变量 x,它在内存中占据 32 bit,也就是 4 个字节,假设 x 的值是 0x1A2B3C4D,十进制为 439,041,101。在内存中 x 就会占据 0x100, 0x101, 0x102, 0x103 四个地址,指针 &x 值即为 0x100。这个时候我们将会有两种排序:

从图中可以看到两种排序方式:

  • 大端序(big-endian) 低位地址存入高位字节,高位地址存入低位字节;
  • 小端序(little-endian) 低位地址存入低位字节,高位地址存入高位字节。

为何需要它们

为什么我们需要分大端序和小端序呢?大端序看上去更符合人类的直觉,为什么不统一使用大端序?这是因为在数学计算上,需要先处理低位数据,比如 23 + 57,先需要处理 3+7,再处理 2+5。而计算机是先处理低位字节的,所以当使用小端序的时候,正好符合计算机运算的逻辑,效率也会比大端序要高,所以在 CPU 中,一般使用小端序,比如我们熟知的 x86 处理器使用的就是小端序。在网络体系中,一般使用大端序,也就是高位字节优先发送,比如 IP 协议定义大端序为网络字节序。

混合序

除此之外,字节序还有混合序,例如:

评论

欢迎您的回复 取消回复

您的邮箱不会显示出来,*必填

本文目录