什么是字节序(Endianness)?
字节序指的是多字节数据(如整数、浮点数)在内存中存储时,字节的排列顺序。 主要有两种方式:Little Endian(小端序) 和 Big Endian(大端序)。
Little Endian(小端序)
在 Little Endian 中,低位字节 存储在内存的低地址处。
例如,32 位整数 0x12345678 在内存中的存储顺序为:
地址增长方向 →
[0x78] [0x56] [0x34] [0x12]
现代 x86 和 x86-64 架构的 CPU 通常使用 Little Endian。
Big Endian(大端序)
在 Big Endian 中,高位字节 存储在内存的低地址处。
同样的数值 0x12345678 的存储顺序为:
地址增长方向 →
[0x12] [0x34] [0x56] [0x78]
许多网络协议(如 TCP/IP)采用 Big Endian,也称为“网络字节序”。一些处理器架构(如 PowerPC、SPARC)默认使用 Big Endian。
如何判断当前系统是哪种字节序?
可以通过以下 JavaScript 代码简单检测浏览器运行环境的字节序:
function isLittleEndian() {
const buffer = new ArrayBuffer(2);
const view = new DataView(buffer);
view.setInt16(0, 0x1234, true); // 强制小端写入
return new Uint8Array(buffer)[0] === 0x34;
}
console.log(isLittleEndian() ? 'Little Endian' : 'Big Endian');
注意:JavaScript 运行在浏览器中,而浏览器通常运行在 Little Endian 系统上,因此结果多为 Little Endian。
为什么字节序重要?
- 跨平台数据交换(如文件格式、网络通信)需统一字节序。
- 嵌入式开发或底层编程中,错误理解字节序会导致数据解析错误。
- 调试内存或反汇编时,需清楚当前系统的字节序。