Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组中的几个字节转换为Go中的另一种类型_Go_Casting_Bytearray - Fatal编程技术网

将数组中的几个字节转换为Go中的另一种类型

将数组中的几个字节转换为Go中的另一种类型,go,casting,bytearray,Go,Casting,Bytearray,我昨天刚开始围棋,所以我为这个愚蠢的问题提前道歉 假设我有一个字节数组,如: func main(){ arrayOfBytes := [10]byte{1,2,3,4,5,6,7,8,9,10} } 现在,如果我想取数组的前四个字节,并将其用作整数,该怎么办?或者我有一个结构,看起来像这样: type eightByteType struct { a uint32 b uint32 } 我可以轻松地将数组的前8个字节转换为eightByteType类型的对象吗 我意

我昨天刚开始围棋,所以我为这个愚蠢的问题提前道歉

假设我有一个字节数组,如:

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中这样做。

看看,还有

TL;DR版本:

import (
    "encoding/binary"
    "bytes"
)

func main() {
    var s eightByteType
    binary.Read(bytes.NewBuffer(array[:]), binary.LittleEndian, &s)
}
这里需要注意的几件事:我们传递数组[:],或者您可以将数组声明为一个片(
[]字节{1,2,3,4,5}
),让编译器担心大小等问题,
eightByteType
将不能按原样工作(IIRC),因为
二进制。Read
不会触及私有字段。这将有助于:

type eightByteType struct {
    A, B uint32
}

这段代码是否真的将数据从数组复制到结构中?@ithkuil你是什么意思?实际上复制与什么相反?与在C中可以做的相反,将bytearray强制转换为一个结构,以便该结构在不复制的情况下使用bytearray占用的相同内存区域。这是我对问题最后一部分的解释:“能够对任何东西强制转换一个字节块是我非常喜欢C的一件事。希望我仍然可以在Go中完成它。”@ithkuil在这种情况下,你需要使用package
unsafe
,这和这个部分回答了你的问题吗?