首页 > 后端开发 > Golang > 正文

转为二进制。读入数据片给出零结果

WBOY
发布: 2024-02-08 22:06:09
转载
585 人浏览过

转为二进制。读入数据片给出零结果

php小编百草在这篇文章中将为大家介绍如何将数据片转为二进制,并给出零结果。这个过程非常简单,只需要遵循一些基本规则即可。首先,将数据片逐个读入,然后将每个数据片转为二进制。接下来,对于每个二进制数,如果其中的数字全为零,则给出零结果。通过这种方法,我们可以方便地将数据片转为二进制,并得到相应的结果。如果你对这个过程感兴趣,那就跟着小编一起来学习吧!

问题内容

我想读取二进制数据并将其写入文件,而我的数据只是切片。编码部分正在工作,但我通过 binary.Read 进行的解码给出了零结果。我做错了什么?

data := []int16{1, 2, 3}
    buf := new(bytes.Buffer)
    err := binary.Write(buf, binary.LittleEndian, data)
    if err != nil {
        fmt.Println("binary.Write failed:", err)
    }
    fmt.Println(buf.Bytes())
    // working up to this point

    r := bytes.NewReader(buf.Bytes())
    got := []int16{}
    if err := binary.Read(r, binary.LittleEndian, &got); err != nil {
        fmt.Println("binary.Read failed:")
    }
    fmt.Println("got:", got)
登录后复制

运行此代码给出

[1 0 2 0 3 0]
got: []
登录后复制

游乐场链接在这里: https://go.dev/play/p/yZOkwXj8BNv

解决方法

您必须使切片的大小与您想要从缓冲区中读取的内容一样大。你得到一个空结果,因为 got 的长度为零。

got := make([]int16, buf.Len()/2)
if err := binary.Read(buf, binary.LittleEndian, &got); err != nil {
    fmt.Println("binary.Read failed:")
}
登录后复制

正如 JimB 所说,您可以直接从缓冲区中读取。

另请参阅 binary.Read

的文档

以上是转为二进制。读入数据片给出零结果的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!