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

article/2025/8/2 21:10:17

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))

http://www.hkcw.cn/article/pOhGeFRQak.shtml

相关文章

基于mediapipe深度学习的虚拟画板系统python源码

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 虚拟画板系统基于计算机视觉与深度学习技术&#xff0c;通过摄像头捕获用户手部动作&#xff0c;利用 MediaPipe框架实现手…

AUTOSAR图解==>AUTOSAR_SWS_DIODriver

AUTOSAR DIO驱动器详解 基于AUTOSAR 4.4.0规范的DIO驱动架构、配置与应用 目录 1. 引言2. DIO驱动架构 2.1 DIO在AUTOSAR架构中的位置2.2 DIO驱动的功能概述 3. DIO驱动的数据类型和API 3.1 基本数据类型3.2 API接口3.3 错误检测 4. DIO驱动的操作流程 4.1 通道操作4.2 端口操…

Python数据类型详解:从字符串到布尔值,一网打尽

Python是现代编程语言中非常流行的一种&#xff0c;它的语法简洁、易懂&#xff0c;非常适合初学者。而在Python编程中&#xff0c;“数据类型”是最基础也是最重要的概念。理解这个概念&#xff0c;将为你之后的编程打下坚实的基础。 1. 什么是数据类型&#xff1f; 在Pytho…

lc hot 100之:双指针题目对比

写到两个给我感觉很类似的双指针题目&#xff0c;但是代码不同&#xff0c;我想把两个题放在一起&#xff0c;对比着看看。 第一题&#xff1a; 首先&#xff0c;提到“重复”&#xff0c;比较好想到哈希表。访问过就在哈希表里记录&#xff0c;然后只要找哈希表中有没有这个数…

6.01打卡

浙大疏锦行 DAY 40 训练和测试的规范写法 知识点回顾&#xff1a; 1. 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 2. 展平操作&#xff1a;除第一个维度batchsize外全部展平 3. dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模…

SIM——引入双阶段搜索机制在用户行为序列的同时关注动态兴趣

文章目录 1. 背景2. 方法2.1 GSU2.1.1 Hard Search2.1.2 Soft Search 2.2 ESU 这里来回顾一篇经典的文章 SIM&#xff08;Search-based Interest Model&#xff09;&#xff0c;也是自己学习一下&#xff0c;虽然挺久了&#xff0c;但是业界都在使用这个&#xff0c;说明含金量…

LeRobot ACT——LeRobot对ALOHA ACT策略的封装:含源码解析与真机部署(效果比肩ACT原论文)

前言 本文一开始是此文的第一部分&#xff0c;后随着我司各大具身团队对各个动作策略的实践、深入&#xff0c;觉得可以挖掘且分享的细节越来越多&#xff0c;比如LeRobot ACT&#xff0c;其效果也不错 ALOHA ACT的复现与应用&#xff1a;双臂下的智能分拣场景 故把其中的「Le…

【Linux网络编程】网络层IP协议

目录 IP协议的协议头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 IP协议的协议头格式 4位版本号 &#xff1a;指定IP协议的版本&#xff0c;对于IPv4&#xff0c;版本号就是4。 4位首部长度&#xff1a;表名IP协议报头的长度&#xff0c;单…

微调大模型:什么时候该做,什么时候不该做?

目录 一、什么是“微调”&#xff1f;你真的需要它吗&#xff1f; 二、什么时候不该微调&#xff1f; &#x1f6ab; 不该微调的 5 个典型场景&#xff1a; 1. 通用问答、闲聊、常识类内容 2. 企业内部问答 / 文档助手 3. 想要通过微调“学会格式” 4. 没有大量高质量标…

[AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT

QA QA攻擊者可以濫用 vssadmin 實用程式來建立卷影快照&#xff0c;然後提取 NTDS.dit 等敏感檔案來繞過安全機制。確定卷影複製服務進入運作狀態的時間。2024-05-14 03:42:16建立卷影快照時&#xff0c;磁碟區複製服務會使用機器帳戶驗證權限並列舉使用者群組。找到卷影複製過…

系统思考:整体观和心智模式

如果你是小区管委会的主委&#xff0c;面对住户抱怨“电梯太慢&#xff0c;每次都要花很久等电梯”&#xff0c;是不是第一反应就是——换马达、更新软件&#xff0c;甚至换整台电梯&#xff1f;这其实是典型的“线性思维”陷阱——把问题看成孤立的零件故障。 从系统思考的角…

常见相机的ISP算法

常见的ISP算法 3A算法 去雾算法 图像增强算法 图像宽动态算法 图像的电子缩放算法&#xff0c;无极电子缩放 图像降噪算法 相机常见问题 1.相机启动速度问题&#xff0c;启动速度较慢 2.相机扛不住高低温问题 3.相机散热问题问题 4.相机高低温芯片保护掉电 5.相机的成像效果或者…

黑马Java面试笔记之框架篇(Spring、SpringMvc、Springboot)

一. 单例bean Spring框架中的单例bean是线程安全的吗&#xff1f; Spring框架中的bean是单例的&#xff0c;可以在注解Scope()进行设置 singleton&#xff1a;bean在每一个Spring IOC容器中只有一个实例。prototype&#xff1a;一个bean的定义可以有多个实例 总结 二. AOP AOP称…

【Go】2、Go语言实战

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 前置知识 本篇将涉及到一些在命令行的输入输出操作&#xff0c;之前我们已经学习了fmt包用于输出内容&#xff0c;下面将介绍bufio包用于读入数据。 bufio包简介 bufio 是 Go 标准库…

基于Python与本地Ollama的智能语音唤醒助手实现

项目简介 本项目是一个基于 Python 的智能语音助手&#xff0c;集成了语音录制、语音识别、AI对话和语音合成功能。用户可以通过语音与本地部署的 Ollama 大模型进行自然对话。 技术架构 核心功能模块 语音录制 - 使用 sounddevice 录制用户语音语音识别 - 使用 faster-whi…

Vue框架2(vue搭建方式2:利用脚手架,ElementUI)

一.引入vue第二种搭建方式 在以前的前端项目中,一个项目需要多个html文件实现页面之前的切换,如果页面中需要依赖js或者css文件,那么我们就需要在多个html文件中都需要导入vue.js文件,太过繁琐. 现在前端开发都采用单页面结果,一个项目中只有一个html文件 其他不同的内容都写…

维斯塔潘谈和拉塞尔碰撞 意外相撞引发讨论

在F1西班牙大奖赛正赛中,维斯塔潘因与拉塞尔相撞被罚时10秒,最终排名第十。赛后采访中,记者问及那次碰撞。维斯塔潘表示两人开车时确实撞到了一起。当记者指出他本可以避免这种情况时,维斯塔潘承认了这一点。至于为什么会发生这样的情况,他表示自己也不清楚。责任编辑:zx…

乌称摧毁俄大量轰炸机 俄媒称系谣言 谎言蛛网

俄罗斯“与假新闻作战”网站发布文章称,通过分析乌克兰方面发布的视频可以确认,乌总统泽连斯基所谓“已摧毁34%俄罗斯远程机队”的说法并不属实。俄方认为,乌方的行动更像是编织了一张“谎言蛛网”。俄方分析指出,乌克兰实际上可能仅摧毁了两架图-95战略轰炸机及一架安-12运…

IntelliJ IDEA 接入 Ollama 本地模型 Qwen-coder

一&#xff1a;下载ollama 官网下载https://ollama.com/ 二&#xff1a;安装 一键自动安装&#xff0c;且安装的是C盘 如果C盘紧张&#xff0c;想装在其他盘符&#xff0c;在安装包目录下打开cmd命令行&#xff0c; 在你想安装的盘下创建一个文件夹&#xff0c;例如在D盘创建…

C++学习-入门到精通【12】文件处理

C学习-入门到精通【12】文件处理 目录 C学习-入门到精通【12】文件处理一、文件和流二、创建顺序文件三、从顺序文件读取数据文件定位指针对之前的程序进行修改&#xff1a;贷款查询程序 四、更新顺序文件五、随机存取文件1.创建随机存取文件2.修改程序&#xff1a;贷款处理程序…