我昨天和Go一起开始,所以我提前为这个愚蠢的问题道歉。
想象一下,我有一个字节数组,如:
func main(){
arrayOfBytes := [10]byte{1,2,3,4,5,6,7,8,9,10}
}
现在如果我想获取该数组的前四个字节并将其用作整数呢?或许我有一个看起来像这样的结构:
type eightByteType struct {
a uint32
b uint32
}
我可以轻松地获取数组的前8个字节并将其转换为类型为EightByteType的对象吗?
我意识到这是两个不同的问题,但我认为他们可能有类似的答案。我查看了文档并没有看到一个很好的例子来实现这一目标。
能够将一块字节转换成任何东西是我真正喜欢的事情之一C.希望我仍然可以在Go中进行。
答案 0 :(得分:2)
查看encoding/binary
以及bytes.Buffer
TL; DR版本:
import (
"encoding/binary"
"bytes"
)
func main() {
var s eightByteType
binary.Read(bytes.NewBuffer(array[:]), binary.LittleEndian, &s)
}
这里需要注意的一些事情:我们传递数组[:],或者你可以将数组声明为切片([]byte{1, 2, 3, 4, 5}
)并让编译器担心大小等问题,eightByteType
将不会按原样运作(IIRC),因为binary.Read
不会触及私人领域。这可行:
type eightByteType struct {
A, B uint32
}