小端或大端:具有相同代码的二进制编码

我有一个纯 TCP 服务器,我的客户端发送一个字节:1= 小端编码,0= 大端编码。


我做了类似的事情(只有这里有趣的部分)


reader := bufio.NewReader(conn)

otherIsLittleEndian, err := reader.ReadByte()

if err != nil {

    panic(err)

}


var encoding = struct {}{}

if otherIsLittleEndian == 1 {

    encoding = binary.LittleEndian

} else {

    encoding = binary.BigEndian

}

然后这是不起作用的部分:


rnd := rand.Uint64()

buf := new(bytes.Buffer)

_ = binary.Write(buf, encoding, rnd)  // not working

最后一行不起作用,但如果我用以下代码替换它,它会起作用,但我不想为每个Write()调用都这样做:


if otherIsLittleEndian == 1 {

    _ = binary.Write(buf, binary.LittleEndian, rnd)

} else {

    _ = binary.Write(buf, binary.BigEndian, rnd)

}

解决办法是什么?


狐的传说
浏览 119回答 1
1回答

慕斯709654

将编码变量声明为 type binary.ByteOrder。var encoding binary.ByteOrderif otherIsLittleEndian == 1 {    encoding = binary.LittleEndian} else {    encoding = binary.BigEndian}正如错误消息告诉您的那样, to 的参数binary.Write是 a binary.ByteOrder,而不是 a struct{}。和值实现接口(binary.LittleEndian文档)。binary.BigEndianbinary.ByteOrder
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go