欢迎来到代码驿站!

Golang

当前位置:首页 > 脚本语言 > Golang

Golang 字符串与字节数组互转的实现

时间:2022-10-25 09:32:35|栏目:Golang|点击:

一、字符串与字节数组?

字符串是 Go 语言中最常用的基础数据类型之一,本质上是只读的字符型数组,虽然字符串往往都被看做是一个整体,但是实际上字符串是一片连续的内存空间。

Go 语言中另外一个类型字节(Byte)。在ASCII中,一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间。英文标点占一个字节,中文标点占两个字节。一个Byte数组中的元素对应一个ASCII码。

二、详细代码

1.字节转字符串

代码如下(示例):

func BytesToString(data []byte) string {
    return *(*string)(unsafe.Pointer(&data))
}

2.字符串转字节数组

代码如下(示例):

func StringToBytes(data string) []byte {
    return *(*[]byte)(unsafe.Pointer(&data))
}

3.完整运行测试

代码如下(示例):

func BytesToString(data []byte) string {
    return *(*string)(unsafe.Pointer(&data))
}


func StringToBytes(data string) []byte {
    return *(*[]byte)(unsafe.Pointer(&data))
}

func main() {
    str := "hello world!"

    fmt.Println(str)

    a := StringToBytes(str)

    fmt.Println(a)

    b := BytesToString(a)

    fmt.Println(b)
}

结果(示例):

成功转译出Hello world!

总结

两个方法来记住字节数组与字符串互转,简单直接,实用性拉满。

在byte数组转字符串时,需要去掉数组中ASII为0的字符,数组的大小是固定的,字符串本身的长度可能小于数组的长度,如果直接转换成字符串就会出现问题。使用byte切片时候正常的原因是切片的长度会自动和字符串的长度一致,string会区切片长度个数的字符。而数组在初始化时会有默认值,且数组的长度和容量一样,转换成字符串的时候可能会多出一部分字符,从而导致出错。

上一篇:Golang 并发下的问题定位及解决方案

栏    目:Golang

下一篇:Go语言Handler详细说明

本文标题:Golang 字符串与字节数组互转的实现

本文地址:http://www.codeinn.net/misctech/217282.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有