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

标签 go

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/

相关文章:

string - panic : runtime error: slice bounds out of range [2:1]

windows - 如何在 Go 中获取 Windows 进程的句柄?

go build 命令行参数 : open NUL: Can not find the specified file

go - 使用包加载器,如何更新包含注释的ast并打印结果代码

go - 如何使用未导出结构体的函数

go - 我的 net/http post 方法使用了 100% 的 CPU

qt - 是否可以在 Qt(Golang 绑定(bind))应用程序中使用 Sparkle?

go - 如何在 go 中获取指向类型化函数的函数指针?

git - 在自定义 GO 包之上提交

static - 如何在 Go 中拥有非共享的状态变量?