1.1 KiB
1.1 KiB
Golang 的大端序和小端序
什么是大小端序
按地址从小到大排序,数据的高位排在前面的为大端序,数据的低位排在前面的为小端序。
Golang 的大小端操作
最常见的是将数据转换成 []byte 的过程中尤其需要关注大小端序。Golang 处理大小端序的代码位于 encoding/binary 包。包中的全局变量 BigEndian 用于操作大端序数据,LittleEndian 用于操作小端序数据,这两个变量所对应的数据类型都实行了 ByteOrder 接口:
type ByteOrder interface {
Uint16([]byte) uint16
Uint32([]byte) uint32
Uint64([]byte) uint64
PutUint16([]byte, uint16)
PutUint32([]byte, uint32)
PutUint64([]byte, uint64)
String() string
}
示例代码
func ToBigByte(d int32) (b []byte) {
binary.BigEndian.PutUint32(b, uint32(d))
}
func ToLittleByte(d int32) (b []byte) {
binary.LittleEndian.PutUint32(b, uint32(d))
}
func FromBigByte(b [4]byte) (d int32) {
return int32(binary.BigEndian.Uint32(b[0:4]))
}
func FromLittleByte(b [4]byte) (d int32) {
return int32(binary.LittleEndian.Uint32(b[0:4]))
}