# Golang 的大端序和小端序 ## 什么是大小端序 按地址从小到大排序,数据的高位排在前面的为大端序,数据的低位排在前面的为小端序。 ## Golang 的大小端操作 最常见的是将数据转换成 []byte 的过程中尤其需要关注大小端序。Golang 处理大小端序的代码位于 encoding/binary 包。包中的全局变量 BigEndian 用于操作大端序数据,LittleEndian 用于操作小端序数据,这两个变量所对应的数据类型都实行了 ByteOrder 接口: ```go type ByteOrder interface { Uint16([]byte) uint16 Uint32([]byte) uint32 Uint64([]byte) uint64 PutUint16([]byte, uint16) PutUint32([]byte, uint32) PutUint64([]byte, uint64) String() string } ``` ## 示例代码 ```go 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])) } ```