理解字节顺序的大端和小端

Apr 12, 2023 • 预计阅读时间 1 分钟

大端和小端是用来描述字节在内存中存储的顺序:

大端 (big endian):内存中的高位地址。

小端 (little endian):内存中的低位地址。

字节序的最小数据单位是字节(Byte)而不是比特(Bit),对于单个 char 不需要关心字节序。

举例:

数值 0xabcdef 在大端和小端模式下的字节序,使用 C 语言表示为:

union {
  int value;
  char bytes[4];
} payload;

payload.value = 0xabcdef;

// 如果是大端模式,高位存在低地址、低位存在高地址
payload.bytes[0] == 0;
payload.bytes[1] == 0xab;
payload.bytes[2] == 0xcd;
payload.bytes[3] == 0xef;

// 如果是小端模式,高位存在高地址、低位存在低地址
payload.bytes[0] == 0xef;
payload.bytes[1] == 0xcd;
payload.bytes[2] == 0xab;
payload.bytes[3] == 0;

以上代码中 bytes[0] - bytes[3] 表示从低地址往高地址读取数据。

数值的比特(Bit)位不受大端和小端的影响,因为这是两个完全不同的概念。

UTF 字符编码与字节序

对于任何字符编码,编码单元的顺序是由编码方案指定的,与字节序无关。

UTF-8 是单编码,所以不需要考虑字节序。

UTF-16 和 UTF-32 是多字节编码,需要考虑字节序,所以有 UTF-16LE、UTF-16BE 和 UTF-32LE、UTF-32BE 的区别。

版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

使用 OpenSSH 连接到 OpenWRT 的 SSH 服务

使用命令行把 p12 证书导入系统钥匙链