小编Eri*_*ren的帖子

为什么binary.Read()没有正确读取整数?

我正在尝试在Go中读取二进制文件.

基本上我有这样的结构:

type foo struct {
    A int16
    B int32
    C [32]byte
    // and so on...
}
Run Code Online (Sandbox Code Playgroud)

我正在从文件中读取结构,如下所示:

fi, err := os.Open(fname)
// error checking, defer close, etc.
var bar foo
binary.Read(fi, binary.LittleEndian, &bar)
Run Code Online (Sandbox Code Playgroud)

现在,这应该工作,但我得到一些奇怪的结果.例如,当我读到结构时,我应该得到这个:

A: 7
B: 8105
C: // some string
Run Code Online (Sandbox Code Playgroud)

但我得到的是这个:

A: 7
B: 531169280
C: // some correct string
Run Code Online (Sandbox Code Playgroud)

这样做的原因是因为在binary.Read()读取文件时,在读取[]byte{7, 0}as int16(7)(正确的值A)之后,它会遇到切片[]byte{0, 0, 169, 31}并尝试将其转换为int32.然而,binary.Read()转换是这样的:

uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | …

c struct go

1
推荐指数
1
解决办法
79
查看次数

标签 统计

c ×1

go ×1

struct ×1