2
在Golang中将[]uint32
转换为[]byte
的最有效方法是什么?在golang中将[] uint32转换为[]字节,反之亦然
例如:
func main() {
source := []uint32{1,2,3}
dest := make([]byte, 4 * len(source))
// source to dest
// ?
check := len(dest)/4
// dest to check
// ?
}
我有一个solution,但它由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)
}
1.代码中的因子“4”表示您不想进行类型转换,但是以某种方式获取您的[] uint32的原始内存。 2.什么是endianess? 3.“最有效的方式”还不够具体:从什么意义上来说是不舒服的? CPU周期,内存,代码行,兼容性,可理解性? – Volker
它在appengine上,所以我真的不知道他们使用什么样的机器,最大的可能性是小端。在性能方面效率很高 – Kokizzu