文章目录
- 一、核心概念再拆解(更通俗的比喻)
- 1. 小端序(Little-Endian):“先放个位,再放十位…”
- 2. 大端序(Big-Endian):“先放千位,再放百位…”
- 二、实战验证:用C代码看x86的小端序
- 运行结果(x86系统):
- 三、为什么要关心字节序?(实际编程意义)
- 总结
你希望用最通俗的方式理解字节序的核心本质——它本质是多字节数据拆分后在内存中的“排队规则”,重点区分小端序(低位字节先占内存首地址)和大端序(高位字节先占内存首地址),并明白这只是不同硬件平台的约定,没有对错之分。
一、核心概念再拆解(更通俗的比喻)
先牢牢记住:字节序只和“多字节数据”有关,单字节数据(如char类型的0x78)不存在这个问题。
我们用“四位数字密码锁”(对应4字节的0x12345678)来比喻,密码锁有4个格子(对应4个内存地址,首地址=第一个格子):
| 数据位 | 0x12(最高位,千位) | 0x34(百位) | 0x56(十位) | 0x78(最低位,个位) |
|---|---|---|---|---|
| 密码锁格子号 | 格子1(首地址) | 格子2 | 格子3 | 格子4 |
1. 小端序(Little-Endian):“先放个位,再放十位…”
小端序的核心是「低位字节(个位)先占首地址」,就像你解锁时先拨个位、再拨十位,最后拨千位:
- 格子1(首地址):0x78(个位,最低位)
- 格子2:0x56(十位)
- 格子3:0x34(百位)
- 格子4:0x12(千位,最高位)
→ 内存中顺序:78 56 34 12(倒着放)
生活类比:你往钱包里塞钱,先塞1块、5块(低位),再塞100块(高位),钱包开口(首地址)先摸到零钱。