专业建设英文网站,厦门微网站建设,兰州网络推广关键词优化,外贸自主建站平台简介
string与byte的转换是最常见的一种#xff0c;通常我们会使用强转方式#xff0c;但其实还有另一种更加高效的方式#xff0c;本文会演示两种转换方式。
普通转换
func main() {fmt.Println([]byte(abcd))fmt.Println(string([]byte{1, 2, 3}))
}输出
[…简介
string与byte的转换是最常见的一种通常我们会使用强转方式但其实还有另一种更加高效的方式本文会演示两种转换方式。
普通转换
func main() {fmt.Println([]byte(abcd))fmt.Println(string([]byte{1, 2, 3}))
}输出
[97 98 99 100]
123
高效转换
上面的转换虽然简单但是效率不高因为存在一次拷贝需要新开辟内存但其实string与[]byte的数据结构非常相似只不过[] byte多了一个容量大小cap那么其实只要把值的引用地址切换一下把cap加上就可以了
而引用地址的转换可以使用unsafe.Pointer做到当然这个不确定高版本会不会再支持需要注意
转换实现如下
func main() {fmt.Println(StringToBytes(abcd))fmt.Println(BytesToString([]byte{1, 2, 3}))
}func BytesToString(b []byte) string {return *(*string)(unsafe.Pointer(b))
}func StringToBytes(s string) []byte {return *(*[]byte)(unsafe.Pointer(struct {stringCap int}{s, len(s)},))
}输出
[97 98 99 100]
123欢迎关注学习不迷路