linux之字节序
linux之字节序
大端字节序(Big-Endian)和小端字节序(Little-Endian) 是两种不同的多字节数据存储方式,主要区别在于字节在内存中的排列顺序。它们在计算机体系结构、网络通信和文件存储中非常重要。
1. 基本概念
- 字节序(Endianness):指多字节数据(如
int,float等)在内存中的存储顺序。 - 核心问题:一个 32 位整数
0x12345678(十六进制),在内存中如何排列?
2. 大端字节序(Big-Endian)
-
高字节在前,低字节在后(类似人类书写习惯)。
-
示例:
0x12345678的存储顺序:内存地址 存储内容 0x1000 0x120x1001 0x340x1002 0x560x1003 0x78 -
特点:
- 高位字节(
0x12)存储在低地址。 - 常见场景:网络协议(如 TCP/IP)、Java 虚拟机、PowerPC 处理器。
- 高位字节(
3. 小端字节序(Little-Endian)
-
低字节在前,高字节在后(与人类书写习惯相反)。
-
示例:
0x12345678的存储顺序:内存地址 存储内容 0x1000 0x780x1001 0x560x1002 0x340x1003 0x12 -
特点:
- 低位字节(
0x78)存储在低地址。 - 常见场景:x86/x64 处理器、ARM(可配置)、Windows/Linux 系统。
- 低位字节(
4. 如何判断当前系统的字节序?
C 代码示例:
#include <stdio.h>
int main() {
int num = 0x12345678;
char *p = (char *)#
if (*p == 0x78) {
printf("Little-Endian\n");
} else {
printf("Big-Endian\n");
}
return 0;
}
- 如果输出
Little-Endian,说明系统是小端;否则是大端。
5. 字节序的实际影响
-
网络通信:
- 网络协议(如 IP、TCP)默认使用 大端字节序(称为“网络字节序”)。
- 发送数据前需调用
htonl()(Host to Network Long)转换字节序。
-
文件读写:
- 跨平台读取二进制文件时(如 BMP 图片),需注意字节序。
-
跨平台开发:
- 不同处理器(如 x86 vs PowerPC)可能使用不同字节序,需处理兼容性。
6. 记忆技巧
- 大端:高字节在低地址(“高个子站前面”)。
- 小端:低字节在低地址(“小个子站前面”)。
7. 总结
| 特性 | 大端字节序 | 小端字节序 |
|---|---|---|
| 字节顺序 | 高位在前(0x12...) |
低位在前(0x78...) |
| 常见架构 | PowerPC, SPARC | x86, ARM(通常) |
| 网络协议 | 是(TCP/IP) | 需转换 |
| 人类友好 | 是(类似书写顺序) | 否 |
理解字节序对底层编程、网络协议和跨平台开发至关重要!

浙公网安备 33010602011771号