目录
  • 一、字符串与字节数组?
  • 二、详细代码
    • 1.字节转字符串
    • 2.字符串转字节数组
    • 3.完整运行测试
  • 总结

    一、字符串与字节数组?

    字符串是 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)
    }

    结果(示例):

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

    成功转译出Hello world!

    总结

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

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

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。