This question already has answers here:
Convert between slices of different types

(7个答案)


2年前关闭。




如何在不分配新的[]uint16 slice 的情况下将字节的 slice 转换为uint16并反转。这个问题集中在性能和内存消耗上

最佳答案

考虑到converting = copying,除了两个特殊情况:m:=map[string]int{};m[string(bytes))没有分配,与append类似。
Using unsafe.Pointer似乎是当前解决方法(顾名思义,“不安全”)

u16 := *(*uint16)(unsafe.Pointer(&byte_array[4]))
有一个proposal to use unsafe.Slice instead
还有(暂时拒绝)proposal golang/go issue 13656

问题是必须为某些C,T,v和n编写(*[C]T)(unsafe.Pointer(v))[:n:n]
编写整个表达式的更简单方法是理想的。
var s []byte = C.AsSlice((*byte)(ptr), n)

关于go - 转换 slice 的字节而不复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51346167/

10-15 20:53