最好不要用这种方式:

    var line string
    bytes := *(*[]byte)(unsafe.Pointer(&line)) // 遇到bytes的len大于0,cap为0的情况,操作bytes的时候,会panic

    var d []byte
    line = *(*string)(unsafe.Pointer(&d))

推荐以下方式:

import (
    "reflect"
    "unsafe"
)

func String(b []byte) (s string) {
    pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b))
    pstring := (*reflect.StringHeader)(unsafe.Pointer(&s))
    pstring.Data = pbytes.Data
    pstring.Len = pbytes.Len
    return
}

func Slice(s string) (b []byte) {
    pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b))
    pstring := (*reflect.StringHeader)(unsafe.Pointer(&s))
    pbytes.Data = pstring.Data
    pbytes.Len = pstring.Len
    pbytes.Cap = pstring.Len
    return
}

相关文章:

  • 2022-02-15
  • 2022-01-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-01
  • 2021-07-02
  • 2021-09-14
猜你喜欢
  • 2021-07-07
  • 2022-12-23
  • 2022-12-23
  • 2021-11-03
  • 2021-10-03
相关资源
相似解决方案