gpt4 book ai didi

go - binary.Write() 字节排序不适用于 []byte

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:08 30 4
gpt4 key购买 nike

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com