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