加载中...
字节序指多字节数据在内存或传输中的字节排列顺序,分为大端和小端两种。大端把高位字节放在低地址,小端把低位字节放在低地址,不同架构与协议约定不同,影响数据交换。

| 中文名 | 字节序 |
| 外文名 | Endianness |
| 主要类型 | 大端序、小端序 |
| 网络字节序 | 大端 |
| x86架构 | 小端 |
| 典故来源 | 格列佛游记 |
字节序又称端序,是指一个占用多个字节的数据在计算机内存中或网络传输时,其各字节按怎样的先后顺序排列存储的约定,主要分为大端序和小端序两种,直接影响跨平台数据交换的正确性。
一个整数如果超过一个字节,就必须决定哪个字节存放在低地址、哪个存放在高地址。这个排列顺序在硬件层面并没有唯一正确答案,不同处理器厂商做出了不同选择,于是形成了字节序问题。当数据只在同一台机器内使用时字节序无关紧要,但一旦涉及不同架构间通信或文件交换,就必须明确约定,否则会读出错误数值。这个术语典故源自小说中关于剥鸡蛋应从大端还是小端敲开的争论。
常见的 x86 与 x86-64 架构采用小端序,早期的 SPARC、PowerPC 等多为大端,ARM 则支持可配置的双端序。为了检测本机字节序,可以取一个已知的多字节整数,再读取其最低地址处的字节值加以判断。跨平台程序在序列化数据时,应显式指定字节序或使用标准转换函数,以避免不可移植的隐患。
问:如何判断当前机器是大端还是小端?答:可以定义一个值为 1 的多字节整数,通过指针读取它最低地址处的那个字节,若为 1 则是小端,若为 0 则是高位在前的大端。
问:为什么网络传输要统一字节序?答:网络上连接着各种不同架构的设备,若不约定统一顺序,发送方和接收方对同一串字节的理解就会不同,统一为网络字节序即大端可保证各方一致解释数据。

| 中文名 | 字节序 |
| 外文名 | Endianness |
| 主要类型 | 大端序、小端序 |
| 网络字节序 | 大端 |
| x86架构 | 小端 |
| 典故来源 | 格列佛游记 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧