NotePublic/Software/Development/Language/Go/Package/Encoding/Binary/Golang_的大端序和小端序.md

1.1 KiB
Raw Blame History

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]))
}