高位字节存放在低地址,数据的「大端」(高位)在前。
例:32 位整数 0x12345678 存放在起始地址 0x100
地址: 0x100 0x101 0x102 0x103
内容: 0x12 0x34 0x56 0x78
↑高位 ↑低位
低位字节存放在低地址,数据的「小端」(低位)在前。
地址: 0x100 0x101 0x102 0x103
内容: 0x78 0x56 0x34 0x12
↑低位 ↑高位
int x = 0x01; // 0x00000001
char *p = (char*)&x;
if (*p == 1) // 低地址存 0x01 → 小端
printf("Little Endian");
else // 低地址存 0x00 → 大端
printf("Big Endian");
| 性质 | 大端 | 小端 |
|---|---|---|
| 高位字节 | 低地址 | 高地址 |
| 低位字节 | 高地址 | 低地址 |
| 人类阅读 | 直观(高位在前) | 需反转 |
| 计算机处理 | 无特殊优势 | 低位运算方便 |
| 网络传输 | 标准(网络字节序) | 需要转换 |
| 代表架构 | PowerPC, SPARC, 网络 | x86, ARM(默认) |
| 考法 | 解题套路 |
|---|---|
| 给地址内容判断大/小端 | 看首地址存的是高位还是低位字节 |
| 大端转小端 | 字节序反转 |
| 写出存储布局 | 大端:从高到低;小端:从低到高 |
| 网络传输中的字节序 | 发送前转大端(htonl),接收后转小端(ntohl) |
| 给定值写出各地址内容 | 分解字节 → 按大/小端排列 |
| 地址 | 大端内容 | 小端内容 |
|---|---|---|
| 0x000 | 0x12 | 0x78 |
| 0x001 | 0x34 | 0x56 |
| 0x002 | 0x56 | 0x34 |
| 0x003 | 0x78 | 0x12 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。