【问题标题】:Convert byte of slice without copy [duplicate]在不复制的情况下转换切片字节[重复]
【发布时间】:2018-07-15 07:17:40
【问题描述】:

如何将字节切片转换为[]uint16 并在不分配新uint16 切片的情况下反转。本题关注性能和内存消耗

【问题讨论】:

  • 我正在使用。但我不知道它是否正确: func EncodeUint16(d []byte) []uint16 { return *(*[]uint16)(unsafe.Pointer(&d)) } func EncodeToByteSl(d []uint16) []byte { return *(*[]byte)(unsafe.Pointer(&d)) }

标签: go


【解决方案1】:

考虑converting = copying,除了两种特殊情况:m:=map[string]int{};m[string(bytes)) 没有分配,与追加类似。

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多