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

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

南门正业
2023-03-14
问题内容

我昨天刚开始使用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

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不会触摸私人领域。这将工作:

type eightByteType struct {
    A, B uint32
}


 类似资料:
  • 问题内容: 我正在尝试使用Go语言,并且对它很陌生。我已经成功地完成了教程,现在正在编写一个小程序来评估其通常执行的操作类型的性能。我有一个很长的float32类型切片,需要将其尽可能有效地转换为float64类型的切片。除了遍历slice的元素并通过output [i] = float64(data [i])显式转换单个元素的类型外,还有没有一种方法可以用来转换整个slice而无需迭代?我曾尝试

  • 问题内容: 从源(s,s,s)读取图像的最便捷方法是: 但是,然后, 如何转换为格式? 问题答案: 您可以创建所需类型的新BufferedImage,然后在其上绘制原始图像,如下所示:

  • 我有一个非常具体的要求。我有一个java应用程序,在这里我必须将字节数组转换为具有int、String等java类型的消息。消息的结构在c中定义如下- 我在java应用程序中收到的是字节数组。我不知道c应用程序是否使用proto缓冲区或任何其他方式来转换为字节数组。但是,如果我逐个字节地解析数组,我可以得到值。例如- 这一行将返回正确的id值(结构中的第一个属性是int)。 我的问题是——如果我为

  • 问题内容: 我需要将缓冲区的长度存储在4个字节大的字节数组中。 伪代码: 做到这一点的最佳方法是什么?请记住,稍后我必须将该字节数组转换回整数。 问题答案: 您可以使用以下方式将其转换为字节: 注意,这样做时可能必须考虑字节顺序。

  • 有一些东西让我困惑,我没有找到关于VM规范的太多信息。这有点晦涩,如果有人能给我解释一下就好了。 这几行代码...... ..... 生成此输出: 浮动:无限 int: 2147483647 短:-1 字节:-1 、和是8位、16位和32位,带有两个补码和是32位和64位的IEEE 754(参见此处)。 根据我的理解,最大值的意味着尾数的所有位(52位)都切换到1。因此,转换为短或字节返回-1,即

  • 问题内容: 我有一个类型为TYPE_4BYTE_ABGR的字节数组,我知道它的宽度和高度,我想将其更改为BufferedImage,有什么想法吗? 问题答案: 可能效率不是很高,但是可以通过以下方式将a转换为另一种类型: 关于您要实现的方法,您必须知道图像的宽度或高度才能将a转换为a 。 编辑: 一种方法是将转换为(数据类型)并使用: