当前位置: 首页 > 面试题库 >

在Golang中如何将切片转换为数组

郭彬郁
2023-03-14
问题内容

我是Go的新手,正在尝试编写一个读取RPM文件的应用程序。每个块的开头都有的魔术字符[4]byte

这是我的结构

type Lead struct {
  Magic        [4]byte
  Major, Minor byte
  Type         uint16
  Arch         uint16
  Name         string
  OS           uint16
  SigType      uint16
}

我正在尝试执行以下操作:

lead := Lead{}
lead.Magic = buffer[0:4]

我在网上搜索,不确定如何从切片到数组(不进行复制)。我总是可以制作魔术[]byte(甚至是uint64),但我对如何从类型[]byte转换为更好奇[4]byte


问题答案:

内置方法 copy 只会将一个切片复制到一个切片,而不是将切片复制到一个数组。

您必须欺骗 复制 以将数组视为切片

copy(varLead.Magic[:], someSlice[0:4])

或使用for循环进行复制:

for index, b := range someSlice {

    varLead.Magic[index] = b

}

或者按照zupa所做的使用文字进行操作。我已添加到他们的工作示例中。

去游乐场



 类似资料:
  • 问题内容: 这似乎是这将是整个interwebs一个相当普遍的事情,丰富的实例,但我似乎无法找到如何将一个转换的例子来。 我有一个从外部lib调用的函数,该函数返回一个数组 然后,我需要将该结果传递给其他函数以进行进一步处理。 不幸的是,如果我尝试致电 我懂了 在做 好多了。我该怎么做,尤其是在不创建数据副本的情况下(当我正在做的事情是传递数据时,似乎很愚蠢地复制该数据)。 问题答案: 这应该工作

  • 问题内容: 目前,我这样做是为了将CGO的double数组转换为float64的一部分: 是否有一种不太麻烦的方式来做相同的事情?我想这也可以看作是Go中不同类型的切片/数组之间进行转换的一种通用方法。 问题答案: 您具有执行此操作的正常和安全的方法: 或者,您可以不方便地作弊并执行以下操作: 如果和是相同的基础类型,我们可以使用指向C.double数组的指针,不安全地将其强制转换为相同大小的fl

  • 问题内容: 例如输入:(类型:) 转换示例:(类型:的切片) 问题答案: 除了mhutter的答案外,还请注意您的输入看起来像一个JSON数组(也许是来自JSON文本?)。 如果您这样处理,则可以将其内容编组为一个切片。直接解析其中的数字并不会更快(因为该包使用了反射),但是它肯定更简单: 输出(在Go Playground上尝试):

  • 问题内容: 我正在尝试将字节切片转换为GoLang中的。我找不到在线解决此问题的方法。我见过先转换为字符串然后转换为a的建议,但这似乎不起作用,它失去了它的值,最后以零结束。 例: 而且它不起作用… 问题答案: 例如, 输出:

  • 问题内容: 有没有办法在Golang中将XML([] byte)转换为JSON输出? 我有下面的功能在哪里,但我想经过一些操作后将此XML响应转换为JSON。我已经尝试过打包但没有成功: 我也在使用Go-restful软件包 问题答案: 如果需要使用未知结构将XML文档转换为JSON,则可以使用goxml2json。 范例: 注意:我是该库的作者。

  • 我对切片中的数组感到非常困惑。代码发布在下面。 我知道test()从main()获取arr的副本,test()中的“append”不会分配新数组,因为cap 但是,测试片arr[]和主片arr[]中的底层数组似乎不同,因为它们的地址不同。 另一方面,test()中的append操作会修改main()中的基础数组,因为在打印主切片的基础数组时会出现一个新的1。此外,test()能够设置arr[0]=