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

在golang中将[] uint32转换为[] byte,反之亦然

洪永长
2023-03-14
问题内容

什么是最有效的方式(性能)转换[]uint32,并从[]byte在Golang?

例如:

func main() {
   source := []uint32{1,2,3}
   dest := make([]byte, 4 * len(source))
   // source to dest
   // ?
   check := len(dest)/4
   // dest to check
   // ?
}

我有一个解决方案,但它包含div,mod和乘法

package main
import (
    "fmt"
)
func main() {
    source := []uint32{1,2,3}
    dest := make([]byte, 4*len(source))
    fmt.Println(source)
    for start, v := range source {
       dest[start*4+0] = byte(v % 256)
       dest[start*4+1] = byte(v / 256 % 256)
       dest[start*4+2] = byte(v / 256 / 256 % 256)
       dest[start*4+3] = byte(v / 256/ 256/ 256% 256)
    }
    fmt.Println(dest)
    check := make([]uint32,cap(dest)/4)
    for start := 0; start<len(check); start++ {
       check[start] = uint32(dest[start*4+0]) + uint32(dest[start*4+1]) * 256 + uint32(dest[start*4+2]) * 256 * 256 + uint32(dest[start*4+3]) * 256 * 256 * 256
    }  
    fmt.Println(check)
}

问题答案:

我怀疑你是在追逐这样的游乐场

调整LittleEndianBigEndian适当的

package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
)

func main() {
    buf := new(bytes.Buffer)
    source := []uint32{1, 2, 3}
    err := binary.Write(buf, binary.LittleEndian, source)
    if err != nil {
        fmt.Println("binary.Write failed:", err)
    }
    fmt.Printf("Encoded: % x\n", buf.Bytes())

    check := make([]uint32, 3)
    rbuf := bytes.NewReader(buf.Bytes())
    err = binary.Read(rbuf, binary.LittleEndian, &check)
    if err != nil {
        fmt.Println("binary.Read failed:", err)
    }
    fmt.Printf("Decoded: %v\n", check)

}


 类似资料:
  • 我已经阅读了文档和示例,但我很难将其全部整理在一起。我只是尝试获取一个测试pdf文件,然后将其转换为字节数组,然后获取字节数组并将其转换回pdf文件,然后将pdf文件创建到磁盘上。 它可能没有多大帮助,但这是我目前得到的:

  • 问题内容: 我正在寻找一种将Int的位值强制转换为UInt的方法,反之亦然。例如(为了简单起见,使用8位整数),我想实现以下目标: 首先,我提出了以下解决方案: 但是Apple在“ unsafeBitCast()”文档中指出以下内容: ..注意::破坏了Swift的类型系统的保证;使用时要格外小心。几乎总是有更好的方法来做任何事情。 有谁有更好的方法? 问题答案: 你可以做: 存在许多类似的初始化

  • 问题内容: 无法将image.image转换为[] byte。问题点用虚线包裹。 基本上,我需要new_image为[] byte格式,以便可以将其发送到我的S3存储桶。 谢谢您的帮助。 问题答案: 您需要一个byte.Buffer,而不是bufio.Writer。bytes.Buffer在需要写入器的写入器时使用。bufio.Writer只是在将数据转发到另一个写入器之前将其缓存在内存中。

  • 问题内容: 如果我有RGB小数,例如,我该怎么做才能将其转换为CMYK? 例如: 问题答案: 这是Javascript实现的Python端口。

  • 问题内容: 我正在搜索轻量级API(最好是单个类)以转换 到xml,反之亦然,将XML转换回Map。 例: 结果: 然后回来: 我不想使用JAXB或JSON转换API。只需简单的情况,它就不必处理嵌套的地图或属性或其他任何内容。有什么建议么? 编辑:我创建了一个工作副本并粘贴示例。感谢fvu和Michal Bernhard。 下载最新的XStream框架,“仅核心”就足够了。 不需要转换器或其他任

  • 问题内容: 如何在Python中将HTML实体转换为Unicode,反之亦然? 问题答案: 您需要有BeautifulSoup。