当前位置:主页 > 脚本语言 > 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会区切片长度个数的字符。而数组在初始化时会有默认值,且数组的长度和容量一样,转换成字符串的时候可能会多出一部分字符,从而导致出错。

您可能感兴趣的文章:

相关文章