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/