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
的文档
以上就是转为二进制。读入数据片给出零结果的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2358909.html