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/