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 字符串与字节数组互转内容请搜索编程教程以前的文章,希望以后支持编程教程

 一、Map是什么?map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构。map的读取 ...