教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang 如何通过unsafe.Pointer uintptr来实现string与byte互转

golang 如何通过unsafe.Pointer uintptr来实现string与byte互转

发布时间:2023-03-07   编辑:jiaochengji.com
教程集为您提供golang 如何通过unsafe.Pointer uintptr来实现string与byte互转等资源,欢迎您收藏本站,我们将为您提供最新的golang 如何通过unsafe.Pointer uintptr来实现string与byte互转资源

主要是对unsafe.Pointer uintptr的一个应用实例,顺便了解golang的string与slice底层是怎样实现的

func Str2bytes(s string) []byte {
	x := (*[2]uintptr)(unsafe.Pointer(&s))
	h := [3]uintptr{x[0], x[1], x[1]}
	return *(*[]byte)(unsafe.Pointer(&h))
}

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

Str2bytes:方法代码解释

// 如果了解string底层实现,就明白了。string底层其它就是一个结构体
// string 底层实现
type stringStruct struct {
	    str unsafe.Pointer
	    len int
}
x := (*[2]uintptr)(unsafe.Pointer(&s)) //返回的是string的struct信息,x[0]:是s的首指针[对应对应底层str],x[1]:对应字符串的长度[对应底层len]

// 再来看下slice的底层实现
	type slice struct {
		array unsafe.Pointer
		len   int
		cap   int
	}
// 结合slice底层,下面这句代码就明白了吧
h := [3]uintptr{x[0], x[1], x[1]}  // unsafe.Pointer转换后,x[0]对应array指针,x[1]对应len,x[2]:对应cap
到此这篇关于“golang 如何通过unsafe.Pointer uintptr来实现string与byte互转”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang指针的使用限制和unsafe.Pointer的突破之路
golang byte转string_golang面试题:怎么避免内存逃逸?
Golang是否真的没有指针运算?
golang unsafe实践与原理
golang sync/atomic
go字符串转byte_高频golang面试题:字符串转成byte数组,会发生内存拷贝吗?
Go的内存对齐和指针运算详解和实践
bytebuffer怎么转成string_golang面试题:怎么避免内存逃逸?
golang 切片包含_golang面试题:怎么避免内存逃逸?
golang slice 和 string 重用

[关闭]
~ ~