[]byte与string的两种转换方式和底层实现
[]byte与string的两种转换方式和底层实现
为大家说一说[]byte与string的两种转换方式和底层实现方面的介绍,下面为详细的介绍。
fasthttp关于string和[]byte的转换方式和大家平常普遍使用的方式不一样,fasthttp转换实现如下:
//[]byte转string
func b2s(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
//string转[]byte
func s2b(s string) (b []byte) {
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
bh.Data = sh.Data
bh.Cap = sh.Len
bh.Len = sh.Len
return b
}
为什么不用我们常见的string和[]byte的转换方式呢?这样做是怎么提高性能的呢?…
带着这些疑问,今天不念将分享下并总结string和[]byte的转换方式,不同的转换方式之间的实现和区别!
![[]byte与string的两种转换方式和底层实现](https://www.itdai.com/uploads/allimg/240325/20242A217-0.png)
两种转换方式
如果此时此刻你刚好遇到面试官问你string和[]byte如何进行转换,有几种方式?你能答上来吗
反正在写这篇文章之前不念估计是答不出来的,哈哈!
毕竟知道的越多,不知道的也越多嘛
那今天我们就来聊聊,继续往下读之前,我们先了解下这两种数据类型:
string和[]byte
![[]byte与string的两种转换方式和底层实现](https://www.itdai.com/uploads/allimg/240325/2024261B7-1.png)
从上图中可以看出 stringStruct和slice还是有一些相似之处,str和array指针指向底层数组的地址,len代表的就是数组长度。
关于string类型,在go标准库中官方说明如下:
// string is the set of all strings of 8-bit bytes, conventionally but not
// necessarily representing UTF-8-encoded text. A string may be empty, but
// not nil. Values of string type are immutable.
type string string
string是8位字节的集合,string的定义在上图中左侧,通常但不一定代表UTF-8编码的文本。string可以为空,但是不能为nil,并且string的值是不能改变的。
为什么string类型没有cap字段
string的不可变性,也就不能直接向底层数组追加元素,所以不需要Cap。
而[]byte就是一个byte类型的切片,切片本质也是一个结构体。
这里我们先记住下这两种数据类型的特点,对后面的了解两者的转换有帮助!
标准方式
Golang中string与[]byte的互换,这是我们常用的,也是立马能想到的转换方式,这种方式称为标准方式。
// string 转 []byte
s1 := "xiaoxu"
b := []byte(s1)
// []byte 转 string
s2 := string(b)
那还有其他方式吗?当然有的,那就是强转换
强转换方式
强转换方式是通过unsafe和reflect包来实现的,代码如下:
相关阅读
-
如何在香港BGP服务器上进行安全性和隐私性配置?
如果想知道如何在香港BGP服务器上进行安全性和隐私性配置方面的知识,如有不对的地方欢迎指正! 香港BGP服务器是在香港运营的,它是基于BGP多线路的网络拓扑所构建的服务器,主要面向于
-
b2c电子商务网站建设方案 大型b2c网站建设规定
IT袋网为大家说一说b2c电子商务网站建设方案和大型b2c网站建设规定方面的内容,具体内容如下: 访客来到你的B2C网站,是因为他们相信你的网站能给他带来有价值的东西,这些信息也是他们
-
如何处理服务器网络连接不稳定? 服务器网络不稳定有哪些原因
全面为您解析如何处理服务器网络连接不稳定的话题,请看下面详细的介绍。 服务器网络连接是通过硬件和软件系统实现的,当它出现连接不稳定的问题时,这其中可能存在有多种原因。 为了
-
租用美国高带宽服务器的重要性有哪些?
跟大家说一说租用美国高带宽服务器的重要性有哪些的相关介绍,一起来看看吧! 租用美国高带宽服务器的重要性?美国是拥有许多互联网资源,在美国IP资源和带宽资源也是非常丰富的。 提到


