golang string与[]byte互转

string与[]byte经常需要互相转化,普通转化会发生底层数据的复制。如果是临时使用的字符串可以通过unsafe包直接转化数据,不需要内存拷贝

func BytesToStringFast(b []byte) string {
    return *(*string)(unsafe.Pointer(&b))
}

func StringToBytes(s string) []byte {
    sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
    bh := reflect.SliceHeader{sh.Data, sh.Len, 0}
    return *(*[]byte)(unsafe.Pointer(&bh))
}

这种方法有需要注意的地方,使用转化后的结果时必须要保证原内存还在,临时变量比较合适这种场景,如:byte2int

func parseIntBytes(b []byte, base int, bitSize int) (i int64, err error) {
    s := unsafeBytesToString(b)
    return strconv.ParseInt(s, base, bitSize)
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载自:https://halfrost.com/go_map_chapter_one/ https://half...
    HuJay阅读 11,483评论 1 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,916评论 1 32
  • 经过我们的同意,我们正式变成英雄者,联盟的队员,拯救地球,可是在上一级的训练,我们一个怪足足打了十分钟,对此那...
    09小溪流家臣阅读 1,873评论 1 0
  • 管过仓库的都应该知道,货物要先进先出,不管是容易腐坏变质的生鲜,还是有保质期的食品,甚至基本上不会损坏的汽车刹车片...
    王二不二superdos阅读 3,688评论 0 4
  • 轻风袭掠柳, 巧燕舞春来。 群蚁磐浅樱, 温阳醉沫海。
    芝初阅读 1,441评论 10 22

友情链接更多精彩内容