package main

import (
    "encoding/binary"
    "fmt"
    "bytes"
)

func main(){
    b := new(bytes.Buffer)
    c := new(bytes.Buffer)
    binary.Write(b, binary.LittleEndian, []byte{0, 1})
    binary.Write(b, binary.BigEndian, []byte{0, 1})
    binary.Write(c, binary.LittleEndian, uint16(256))
    binary.Write(c, binary.BigEndian, uint16(256))
    fmt.Println(b.Bytes()) // [0 1 0 1]
    fmt.Println(c.Bytes()) // [0 1 1 0]
}

很有意思,为什么binary.Write()字节排序适用于uint8, uint16, uint64 ..etc,但是[]byte吗?

如果[]byte需要按binary.LittleEndian排序并写入bytes.Buffer,则需要首先将其反转吗?有没有解决此问题的有效方法?

谢谢。

最佳答案

只有整数类型会按字节顺序交换。

当它是字节的一部分时,二进制包实际上并不知道要交换什么。

例如,如果您传递1k数据,它将如何知道该怎么办?

将其视为int16,int32或int64?

还是您希望它能使整个 slice 逆转?

关于go - binary.Write()字节排序不适用于[] byte,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41365443/

10-13 05:36