这个问题与this one类似,只是我想将指针和长度转换为固定大小的Golang数组。
对于切片,solution是创建一个包含相关信息的结构,并直接转换它,如下所示:
// Slice memory layout
var sl = struct {
addr uintptr
len int
cap int
}{addr, length, length}
// Use unsafe to turn sl into a []byte.
b := *(*[]byte)(unsafe.Pointer(&sl))
如何为指定的内存创建数组?
答案 0 :(得分:1)
它几乎与切片相同但由于Go数组只是values laid out sequentially
而不是由pointer
,cap
和len
表示就像切片一样,你不需要定义数组的内存布局。
package main
import (
"fmt"
"reflect"
"unsafe"
)
var data = []byte(`foobar`)
func main() {
rv := reflect.ValueOf(data)
ptr := rv.Pointer()
b := *(*[3]byte)(unsafe.Pointer(ptr))
fmt.Printf("%T %q\n", b, b)
}