Go语言中字符串与字节切片转换的详细过程

 更新时间:2025年05月15日 09:07:03   作者:纸鸢666  
在Go语中,字符串(string)和字节切片([]byte)是处理文本和二进制数据的重要类型,理解它们的转换机制及底层表示形式,是编写高效代码的关键,本文将深入探讨字符串与字节切片的转换过程,并通过示例和流程图帮助读者掌握其核心原理,需要的朋友可以参考下

一、字符串转字节切片:[]byte(url)

转换原理

Go语言的字符串默认以UTF-8编码存储。当执行[]byte(url)时,程序会将字符串的每个字符转换为对应的UTF-8编码字节,并将这些字节存储在一个新的切片中。

示例代码

url := "https://example.com"
urlBytes := []byte(url)
fmt.Printf("Byte slice: %v\n", urlBytes) // 输出字节切片(十进制表示)

流程图

+-------------------+     +---------------------+     +-------------------+
|   字符串输入       | --> | UTF-8编码转换       | --> | 字节切片输出       |
|   (如"example")    |     | (每个字符转1-4字节) |     | (如[101 120 97...])|
+-------------------+     +---------------------+     +-------------------+

二、字节切片的用途

字节切片在以下场景中至关重要:

  1. 二进制数据处理:网络通信、文件读写、加密算法等。
  2. 与标准库交互:如io.Readerio.Writer接口处理字节流。
  3. 性能优化:直接操作内存中的字节序列。

三、字节切片转字符串:string(bytes)

通过string()函数可将字节切片还原为字符串:

urlStr := string(urlBytes)
fmt.Printf("String: %s\n", urlStr) // 输出原始字符串

四、字节切片的表示形式

字节切片本质是二进制数据,但可通过不同进制呈现:

1. 二进制表示

每个字节以8位二进制显示:

for _, b := range urlBytes {
    fmt.Printf("%08b ", b) // 如01101000表示字符'h'
}

2. 十进制表示

每个字节转换为0-255的整数:

for _, b := range urlBytes {
    fmt.Printf("%d ", b) // 如104对应'h'
}

3. 十六进制表示

每个字节以两位十六进制数表示:

for _, b := range urlBytes {
    fmt.Printf("%02x ", b) // 如68对应'h'
}

完整示例代码

package main
 
import "fmt"
 
func main() {
    url := "Hello, 世界"
    bytes := []byte(url)
  
    fmt.Println("Binary:")
    for _, b := range bytes { fmt.Printf("%08b ", b) }
  
    fmt.Println("\nDecimal:")
    for _, b := range bytes { fmt.Printf("%d ", b) }
  
    fmt.Println("\nHex:")
    for _, b := range bytes { fmt.Printf("%02x ", b) }
}

输出

Binary:
01001000 01100101 01101100 01101100 01101111 00101100 00100000 11100100 10111000 10010110 11100101 10111001 10001010 
Decimal:
72 101 108 108 111 44 32 228 184 150 229 185 138 
Hex:
48 65 6c 6c 6f 2c 20 e4 b8 96 e5 b9 8a 

五、注意事项

  1. 编码一致性:非ASCII字符(如中文)可能占用多个字节。
  2. 不可变性:字符串不可修改,需通过字节切片间接操作。
  3. 数据复制:转换过程会生成新切片,大字符串可能影响性能。

六、总结

  • []byte(str)将字符串按UTF-8编码转换为字节切片。
  • string(bytes)将字节切片还原为字符串。
  • 字节可表示为二进制、十进制或十六进制,满足不同场景需求。

掌握字符串与字节切片的转换机制,能帮助开发者更灵活地处理文本和二进制数据,提升代码效率和可维护性。

到此这篇关于Go语言中字符串与字节切片转换的详细过程的文章就介绍到这了,更多相关Go字符串与字节切片转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于升级go1.18的goland问题详解

    关于升级go1.18的goland问题详解

    作为一个go语言程序员,觉得自己有义务为go新手开一条更简单便捷的上手之路,下面这篇文章主要给大家介绍了关于升级go1.18的goland问题的相关资料,需要的朋友可以参考下
    2022-11-11
  • 使用go实现删除sql里面的注释和字符串功能(demo)

    使用go实现删除sql里面的注释和字符串功能(demo)

    这篇文章主要介绍了使用go实现删除sql里面的注释和字符串功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Go语言中json操作的实现

    Go语言中json操作的实现

    本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • golang解析网页利器goquery的使用方法

    golang解析网页利器goquery的使用方法

    这篇文章主要给大家介绍了关于golang解析网页利器goquery的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-09-09
  • golang通过node_exporter监控GPU及cpu频率、温度的代码

    golang通过node_exporter监控GPU及cpu频率、温度的代码

    node_exporter这个开源组件是配合prometheus收集主机操作系统层的metrics的常用组件,但是官方没有提供GPU卡的metrics的采集,今天通过本文给大家介绍golang通过node_exporter监控GPU及cpu频率、温度的相关知识,感兴趣的朋友一起看看吧
    2022-05-05
  • 解读unsafe.Pointer和uintptr的区别

    解读unsafe.Pointer和uintptr的区别

    这篇文章主要介绍了解读unsafe.Pointer和uintptr的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Go语言实现优雅关机和重启的示例详解

    Go语言实现优雅关机和重启的示例详解

    优雅的关机是指在关闭服务之前,先让服务处理完当前正在处理的请求,然后再关闭服务,本文主要为大家详细介绍了如何使用Go语言实现优雅关机和重启,感兴趣的小伙伴可以参考一下
    2025-04-04
  • 浅谈go语言闭包的立即执行和不立即执行

    浅谈go语言闭包的立即执行和不立即执行

    Go语言中的闭包是一种可以访问其定义时所在作用域变量的特殊函数,闭包可以分为立即执行和不立即执行两种,本文就来介绍一下go语言闭包的立即执行和不立即执行,感兴趣的可以了解一下
    2025-03-03
  • go结构体嵌套的切片数组操作

    go结构体嵌套的切片数组操作

    这篇文章主要介绍了go结构体嵌套的切片数组操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang 并发以及通道的使用方式

    Golang 并发以及通道的使用方式

    这篇文章主要介绍了Golang 并发以及通道的使用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论