当前位置: 首页 > news >正文

Go语言中的rune和byte类型详解

1. rune类型

1.1. 基本概念

1. rune是Go语言的内建类型,它是int32的别名,即32位有符号整数;

2. 用于表示一个Unicode码点,全拼Unicode code point;

3. 可以表示任何UTF-8编码的字符;

1.2. 特点

1. 每个rune对应一个Unicode字符;

2. 可以表示超过ASCII范围的字符,如中文、日文、表情等;

3. 在内存中占用4个字节,即32位;

1.3. 使用示例

func main() {s := "你好,世界"for _, r := range s {fmt.Printf("%c => %U\n", r, r)}
}

2. byte类型

2.1. 基本概念

1. byte是Go语言的内建类型,它是uint8的别名,即8位无符号整数;

2. 用于表示一个ASCII字符或UTF-8编码的一个字节;

2.2. 特点

1. 每个byte对应一个字节,其中每个字创8位;

2. 只能表示ASCII字符或UTF-8编码的单个字节;

3. 在内存中占用1个字节;

2.3. 使用示例

func main() {s := "Hello"for i := 0; i < len(s); i++ {fmt.Printf("%c => %d\n", s[i], s[i])}
}

3. rune和byte的主要区别

4. 字符串遍历时的差异

4.1. 使用byte遍历,可能出错

s := "你好"
for i := 0; i < len(s); i++ {fmt.Printf("%x ", s[i]) // 打印UTF-8编码的每个字节
}
// 输出: e4 bd a0 e5 a5 bd (6个字节)

4.2. 使用rune遍历,正确方式

s := "你好"
for _, r := range s {fmt.Printf("%c ", r) // 打印每个Unicode字符
}
// 输出: 你 好

5. 类型转换

5.1. 字符串转[]rune

s := "你好"
runes := []rune(s) // 转换为rune切片

5.2. []rune转字符串

runes := []rune{'你', '好'}
s := string(runes)

5.3. 字符串转[]byte

s := "你好"
bytes := []byte(s) // 转换为byte切片

5.4. []byte转字符串

bytes := []byte{0xe4, 0xbd, 0xa0} // "你"的UTF-8编码
s := string(bytes)

6. 实际应用场景

6.1. rune的典型使用场景

1. 处理包含非ASCII字符的字符串;

2. 需要按字符而非字节操作字符串时;

3. 计算字符串的实际字符数而非字节数;

func countChars(s string) int {return len([]rune(s))
}

6.2. byte的典型使用场景

1. 处理二进制数据;

2. 处理纯ASCII字符串;

3. 需要与底层字节交互时;

func processBinary(data []byte) {// 处理字节数据
}

7. 注意事项

1. 使用len()函数直接获取字符串长度时,返回的是字节数而非字符数;

2. 对非ASCII字符串按索引访问时,得到的是UTF-8编码的单个字节而非完整字符;

3. 在range循环中迭代字符串时,会自动按rune处理;

正确获取字符串字符数的方法:

s := "你好,世界"
charCount := utf8.RuneCountInString(s) // 或者 len([]rune(s))

相关文章:

  • 【目标检测】检测网络中neck的核心作用
  • GEE:获取研究区的DEM数据
  • 模拟实现线程池(线程数目为定值)和定时器
  • Java数值处理常见错误解析
  • 鸿蒙OSUniApp集成WebAssembly实现高性能计算:从入门到实践#三方框架 #Uniapp
  • C/C++ 面试复习笔记(3)
  • WEBSTORM前端 —— 第3章:移动 Web —— 第3节:移动适配
  • 【前端】html2pdf实现用前端下载pdf
  • 前端面试准备-5
  • 字节面试手撕题:版本号排序
  • MyBatis03——SpringBoot整合MyBatis
  • OpenLayers 地图标注之图文标注
  • C#数字图像处理(二)
  • Ⅰ.计算机二级选择题(C语言概述)
  • 【第16届蓝桥杯 | 软件赛】CB组省赛第二场
  • [蓝桥杯]外卖店优先级
  • 串口通信技术及USART应用研究
  • 鸿蒙仓颉语言开发教程:自定义弹窗
  • 开始通信之旅-----话题通信
  • python 将音乐和人声分离
  • 网站建设的审批部门是/百度收录的网页数量
  • 建立互联网公司网站/线上推广平台都有哪些
  • 互联网网站建设制作/华为seo诊断及优化分析
  • 电子邮箱网站建设/朝阳seo排名优化培训
  • 广州 网站建设网络推广网页设计/网络营销软件推广
  • sql如何建设网站数据库/seo主要优化