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

什么是最有效的方式(性能)转换[]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)

}

以上是 在golang中将[] uint32转换为[] byte,反之亦然 的全部内容, 来源链接: utcz.com/qa/411399.html

回到顶部