大小端模式(字节序)解释
本文最后更新于 2025-11-21,文章内容可能已经过时。
大小端是指计算机存储多字节数据时的字节顺序:大端模式(Big-Endian)将高位字节存放在内存低地址,符合人类阅读习惯,常用于网络传输;小端模式(Little-Endian)将低位字节存放在内存低地址,是Intel/AMD处理器和几乎所有个人电脑(Windows/Mac/Linux)的默认模式。在跨系统通信(如网络传输、文件共享)时,必须进行字节序转换(如Go中的binary.BigEndian和binary.LittleEndian),否则会导致数据解析错误,就像两个人用不同的书写方向交流需要统一规则一样。
一、大小端
想象你有一串珠子,每颗珠子上写着一个数字,比如"1234"这个数字。
大端模式:像书一样从左到右写
- 你从左到右摆珠子:先放"1",然后"2",然后"3",最后"4"
- 阅读时也从左到右,符合我们平时看数字的习惯
- 就像写电话号码:138-1234-5678,先写前面的数字
小端模式:从右到左写
- 你从左到右摆珠子,但是先放最后一位:先放"4",然后"3",然后"2",最后"1"
- 阅读时需要从右往左看才能得到正确数字
- 就像有些人写数字时先写个位,再写十位,再写百位...
具体例子
- 假设数字是 258 (十六进制 0x0102(每个十六进制数字对应4位二进制数0000 0001 0000 0010),在计算机里占两个"格子")
- 大端模式:第一个格子放 01,第二个格子放 02
- 小端模式:第一个格子放 02,第二个格子放 01
为什么有这两种方式?
- 不同厂家生产的电脑"书写习惯"不同
- 就像有人习惯右手写字,有人习惯左手写字
- 大部分Windows电脑(英特尔处理器)用小端
- 网络传输和苹果部分设备用大端
为什么要关心这个?
当你把一个电脑上的数据传给另一个电脑时,如果它们使用不同的"书写习惯",数字就会被读错,就像把"1234"读成了"4321"。
这就像不同国家的人见面,一个是从左向右写文字,一个是从右向左写文字,需要先统一规则才能正确理解对方。
二、大小端的本质:不是操作系统决定的
大小端(字节序)本质上是计算机硬件架构的特性,而非操作系统层面的概念。更准确地说:
- 由CPU架构决定:Intel/AMD处理器固定使用小端模式,而某些架构(如ARM、PowerPC)可配置
- 操作系统继承硬件特性:Windows运行在x86/x64硬件上所以是小端,但这不是Windows自己决定的
- 跨层次影响:
- 硬件层:CPU设计决定基础字节序
- 系统层:操作系统提供字节序转换API(如htonl)
- 应用层:程序需要处理不同字节序的数据(如网络通信)
- 协议层:网络标准规定使用大端(网络字节序)
三、常见
小端模式 (Little-Endian) - 现代最常见
- 个人电脑/服务器:
- 所有Intel处理器的电脑(从386到现在的Core i9)
- 所有AMD处理器的电脑
- Windows、Linux、Mac(基于Intel/AMD的版本)
- 移动设备:
- 大多数Android手机和平板
- iPhone和iPad(虽然用ARM芯片,但配置为小端模式)
- 游戏机:
- PlayStation、Xbox、Nintendo Switch
简单说:你日常用的电脑、手机90%以上都是小端模式
大端模式 (Big-Endian) - 特定领域
- 网络通信:
- 所有互联网协议(TCP/IP)使用大端(称为"网络字节序")
- 网络数据包在传输前需要转换为大端
- 专业设备:
- 一些老式Sun服务器(SPARC架构)
- 部分IBM大型机
- 一些网络路由器和交换机内部
- 虚拟机:
- Java虚拟机(JVM)内部使用大端
- 部分虚拟机和模拟器
可切换模式的系统
某些现代处理器(如ARM、PowerPC)可以根据软件需要切换大小端模式,就像汽车可以切换左右舵一样。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

