内存与网络的字节序:大端 vs 小端
什么是大端小端
假设有一个 32 位整数 0x12345678,在内存里(低地址→高地址)怎么存:
小端 (Little Endian)
addr: 0x00 0x01 0x02 0x03
data: 78 56 34 12
低字节放在低地址
大端 (Big Endian)
addr: 0x00 0x01 0x02 0x03
data: 12 34 56 78
高字节放在低地址
谁用大端,谁用小端
Intel x86/x64、ARM 等主流 CPU → 默认小端 (Little Endian)
少数架构(如旧的 Motorola 68k、SPARC、部分网络协议)→ 大端 (Big Endian)
网络传输字节序:IETF 标准规定为 大端,称为 Network Byte Order。
为什么这样设计
内存:
方便逐字节扩展:
小端里 int32 的最低有效字节就在地址最低端,直接读出来就是数值的低 8 位。
很适合向上兼容(char → short → int)。
网络
人类习惯:我们写数字都是从高位到低位(比如 1234 左边先写“1”),大端正好把“高位放在前面”,读报文时直观。
联想法:
网络传输要“让人一眼看懂”,所以用“人类习惯的顺序” → 大端。
本地 CPU 要高效算数,Intel 用“小端”方便扩展。