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