登录
首页 >  Golang >  Go问答

小端或大端:同一二进制编码下的字节序

来源:stackoverflow

时间:2024-02-19 13:15:23 349浏览 收藏

golang学习网今天将给大家带来《小端或大端:同一二进制编码下的字节序》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我有一个纯 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)
}

解决办法是什么?


解决方案


将编码变量声明为 binary.byteorder 类型。

var encoding binary.ByteOrder
if otherIsLittleEndian == 1 {
    encoding = binary.LittleEndian
} else {
    encoding = binary.BigEndian
}

正如错误消息所示,binary.write 的参数是 binary.byteorder,而不是 struct{}

binary.littleendianbinary.bigendian 值实现 binary.byteorder 接口 (documentation)。

到这里,我们也就讲完了《小端或大端:同一二进制编码下的字节序》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>