zoukankan      html  css  js  c++  java
  • golang []byte 和 string 无拷贝转换

    最好不要用这种方式:

        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
    }
    
  • 相关阅读:
    day37 事务
    小组分享
    day36 pymysql 索引
    day 35 多表查询
    day 35 作业
    day 34 作业
    AST 节点类型对照表
    babel _shallowEqual.default
    js Proxy
    Symbol
  • 原文地址:https://www.cnblogs.com/zhouj-happy/p/12486878.html
Copyright © 2011-2022 走看看