字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。

字节序分为:大端字节序小端字节序

小端字节序,指一个单元在计算机中存放时按照低位在低地址,高位在高地址的模式存放;

大端字节序,指一个单元在计算机中存放时按照低位在高地址,高位在低地址的模式存放。

Go 语言里字节序的转换主要是通过: encoding/binary

    var i int32 = 0x01020304  // 十六进制表示

    buffer := new(bytes.Buffer)
    binary.Write(buffer, binary.BigEndian, i) // 大端字节序

    fmt.Printf("BigEndian: %x \n", buffer.Bytes()) // 01020304

    buffer = new(bytes.Buffer)
    binary.Write(buffer, binary.LittleEndian, i) // 小端字节序

    fmt.Printf("BigEndian: %x \n", buffer.Bytes()) // 04030201

同时,也支持批量对结构体字节序的相互转换:

    type User struct {
        Name [30]byte
        Age  uint32
    }

    user := User{}
    copy(user.Name[:], "John Wilson")
    user.Age = 30

    buffer := new(bytes.Buffer)
    binary.Write(buffer, binary.BigEndian, &user) // 批量转为大端字节序

    var user1 User
    binary.Read(buffer, binary.BigEndian, &user1) // 批量转回结构体