在 Go 语言中,LittleEndian
和 BigEndian
是 encoding/binary
包中定义的两种字节序(Byte Order),它们决定了多字节数据在内存中的存储方式。
主要区别
-
字节顺序不同:
- LittleEndian(小端序):低位字节存储在低地址(即内存起始位置)
- BigEndian(大端序):高位字节存储在低地址
-
常见使用场景:
- LittleEndian:x86/x64架构计算机、Windows系统常用
- BigEndian:网络协议(如TCP/IP)、Java虚拟机、部分嵌入式系统常用
示例说明
以 32 位整数 0x12345678
(十进制 305419896) 为例:
1
2
3
4
内存地址: 0x00 0x01 0x02 0x03
------------------------------
BigEndian: 12 34 56 78
LittleEndian: 78 56 34 12
Go 中的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import (
"encoding/binary"
"fmt"
)
func main() {
var num uint32 = 0x12345678
buf := make([]byte, 4)
// 使用大端序写入
binary.BigEndian.PutUint32(buf, num)
fmt.Printf("BigEndian: % x\n", buf) // 输出: 12 34 56 78
// 使用小端序写入
binary.LittleEndian.PutUint32(buf, num)
fmt.Printf("LittleEndian: % x\n", buf) // 输出: 78 56 34 12
}
实际应用考虑
- 网络通信:通常使用 BigEndian(网络字节序)
- 文件格式:取决于具体格式规范
- 硬件交互:取决于硬件架构
- 性能:在 x86/x64 架构上,LittleEndian 通常有轻微性能优势
Go 的 encoding/binary
包提供了这两种字节序的便捷操作方法,使得在不同系统或协议间转换数据变得更加容易。
本文网址: https://golangnote.com/topic/325.html 转摘请注明来源