转换切片的字节而不复制

时间:2018-07-15 07:17:41

标签: go

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

1 个答案:

答案 0 :(得分:0)

考虑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)