【Golang】关于Go语言字符串转换strconv

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Go语言字符串转换strconv
    • 1. strconv包概述
    • 2. 整数与字符串的转换
      • 2.1 整数转字符串
      • 2.2 字符串转整数
    • 3. 浮点数与字符串的转换
      • 3.1 浮点数转字符串
      • 3.2 字符串转浮点数
    • 4. 布尔值与字符串的转换
      • 4.1 布尔值转字符串
      • 4.2 字符串转布尔值
    • 5. strconv包的其他功能
      • 5.1 Append系列函数
      • 5.2 辅助函数
    • 6. 总结

Go语言字符串转换strconv

在Go语言(Golang)的编程实践中,strconv包是一个非常重要的标准库,它提供了在基本数据类型(如整型、浮点型、布尔型)和字符串之间的转换功能。
无论是在处理用户输入、文件读写、网络传输还是其他需要数据格式转换的场景中,strconv包都扮演着至关重要的角色。

1. strconv包概述

strconv是两个单词的缩写。string convert = strconv
strconv包位于Go语言的标准库中,它提供了一系列用于字符串和基本数据类型之间转换的函数。这些函数主要包括以下几种类型:

将基本数据类型转换为字符串的函数,如Itoa、FormatInt、FormatFloat、FormatBool等。
将字符串解析为基本数据类型的函数,如Atoi、ParseInt、ParseFloat、ParseBool等。
附加到已存在字节数组的函数,如AppendInt、AppendFloat、AppendBool等。
其他辅助函数,如IsPrint、IsGraphic、Quote、Unquote等。
将字符串转换为其他基础类型的过程叫做解析parse,其他基础类型转换为字符串的过程成为格式化format

2. 整数与字符串的转换

2.1 整数转字符串

在Go语言中,将整数转换为字符串是一个常见的需求。strconv包中的Itoa函数和FormatInt函数都可以实现这一功能。

示例1:使用Itoa函数

package mainimport ("fmt""strconv"
)//整形转字符串
func main() {intNum := 42//整形转字符串方法strconv.ItoastrFromInt := strconv.Itoa(intNum)fmt.Printf("整型转换为字符串: %s\n", strFromInt)fmt.Printf("整型转换为字符串数据类型: %T\n", strFromInt)
}

在这里插入图片描述

在这个例子中,Itoa函数将整数42转换为字符串"42"。

示例2:使用FormatInt函数
对于大整数或需要指定进制的无符号整数场景,可以使用FormatInt函数。
func FormatInt(i int64, base int) string
i 表示需要转换的整数,base 表示源数字要转换后的进制数,最终返回的是 i 的字符串形式

package main  import (  "fmt"  "strconv"  
)  func main() {  bigIntValue := int64(9223372036854775807) // MaxInt64  bigIntStr := strconv.FormatInt(bigIntValue, 10)  fmt.Println("大整数转字符串:", bigIntStr)  // 转换为二进制字符串  binaryStr := strconv.FormatInt(bigIntValue, 2)  fmt.Println("大整数转二进制字符串:", binaryStr)  
}

在这里插入图片描述

2.2 字符串转整数

将字符串转换为整数,可以使用Atoi函数或ParseInt函数。

示例1:使用Atoi函数
注意,字符串转整形,需要进行错误捕获
func Atoi(s string) (int, error)

package main  import (  "fmt"  "strconv"  
)  func main() {  str := "123"  intFromStr, err := strconv.Atoi(str)  if err != nil {  fmt.Println("转换错误:", err)  return  }  fmt.Printf("字符串转换为整型: %d\n", intFromStr)  
}

在这里插入图片描述

Atoi函数将字符串转换为int类型。注意,如果字符串不能被解析为整数,Atoi会返回错误。
在这里插入图片描述

示例2:使用ParseInt函数
ParseInt函数比Atoi更灵活,允许指定基数(进制)和位大小。
func ParseInt(s string, base int, bitSize int) (i int64, err error)
s string表示需要转换的字符串
base int 表示需要转换的数据的进制
bitSize int 表示转换后的整数为多少位int类型
返回一个int64整形和一个error

package main  import (  "fmt"  "strconv"  
)  func main() {  hexStr := "FF"  hexValue, err := strconv.ParseInt(hexStr, 16, 64)  if err != nil {  fmt.Println("转换错误:", err)  return  }  fmt.Printf("十六进制字符串转整数: %d\n", hexValue)  
}

在这里插入图片描述

3. 浮点数与字符串的转换

3.1 浮点数转字符串

将浮点数转换为字符串,可以使用FormatFloat函数。
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
f:要格式化的浮点数
fmt:格式标记,'b’表示二进制,'e’表示科学计数法,'f’表示十进制无指数,'g’表示最少计数法表示
prec:表示精度,对于’f’和’g’格式,代表除小数点以外的位数。也可以是-1,表示根据浮点数的小数位数自动确定保留的位数。
bitsize:浮点数类型,32表示float32,64表示float64

示例

package main  import (  "fmt"  "strconv"  
)  func main() {  floatValue := 3.14159  floatStr := strconv.FormatFloat(floatValue, 'f', -1, 64)  fmt.Println("浮点数转字符串:", floatStr)  // 保留两位小数  preciseFloatStr := strconv.FormatFloat(floatValue, 'f', 2, 64)  fmt.Println("精确到两位小数的浮点数转字符串:", preciseFloatStr)  
}

在这里插入图片描述

3.2 字符串转浮点数

将字符串转换为浮点数,可以使用ParseFloat函数。
func ParseFloat(s string, bitSize int) (float64, error)

将字符串解析为浮点数,如果 s 符合语法规则,会返回一个最为接近 s 表示值得浮点数(IEEE754 规范舍入)
bitSize 指定解析结果的浮点数类型,32 是 float32,64 是 float64
返回值 err 是 *NumErr 类型的,语法有误时,err.Error = ErrSyntax;结果超出表示范围时,返回值 f 为 ±Inf,err.Error= ErrRange

示例

package main  import (  "fmt"  "strconv"  
)  func main() {  str := "3.14"  floatValue, err := strconv.ParseFloat(str, 64)  if err != nil {  fmt.Println("转换错误:", err)  return  }  fmt.Println("字符串转浮点数:", floatValue)  
}

在这里插入图片描述

4. 布尔值与字符串的转换

4.1 布尔值转字符串

将布尔值转换为字符串时,可以使用strconv.FormatBool函数。该函数将true转换为字符串"true",将false转换为字符串"false"。

示例

package main  import (  "fmt"  "strconv"  
)  func main() {  boolValue := true  boolStr := strconv.FormatBool(boolValue)  fmt.Println("布尔值转字符串:", boolStr)  fmt.Printf("布尔值转字符串数据类型:%T\n", boolStr)}

在这里插入图片描述

4.2 字符串转布尔值

将字符串转换为布尔值时,可以使用strconv.ParseBool函数。
该函数会尝试将字符串解析为布尔值,并返回解析后的布尔值和可能发生的错误。有效的布尔值字符串为"true"和"false"(不区分大小写)。

示例代码:

package main  import (  "fmt"  "strconv"  
)  func main() {  //字符串转换为布尔值,里面的布尔值不区分大小写str := "true"  boolValue, err := strconv.ParseBool(str)  if err != nil {  panic(err)  }  fmt.Println("字符串转布尔值:", boolValue)  fmt.Printf("字符串转布尔值数据类型:%T\n", boolValue)}

在这里插入图片描述

5. strconv包的其他功能

5.1 Append系列函数

strconv包还提供了Append…系列函数,这些函数可以将基本数据类型追加到已存在的字节数组中,而无需重新分配整个数组。这在处理大量数据时非常有用,可以显著提高性能。

package main  import (  "fmt"  "strconv"  
)  func main() {  // 追加整数到字节数组  num1 := 123  byteSlice := []byte("Number: ")  byteSlice = strconv.AppendInt(byteSlice, int64(num1), 10)  fmt.Println("追加整数:", string(byteSlice))  // 追加布尔值到字节数组  boolVal := true  byteSlice = []byte("Bool: ")  byteSlice = strconv.AppendBool(byteSlice, boolVal)  fmt.Println("追加布尔值:", string(byteSlice))  // 追加浮点数到字节数组  floatVal := 3.14  byteSlice = []byte("Float: ")  byteSlice = strconv.AppendFloat(byteSlice, floatVal, 'f', -1, 64)  fmt.Println("追加浮点数:", string(byteSlice))  
}

在这里插入图片描述

5.2 辅助函数

strconv包还包含一些辅助函数,如IsPrint、IsGraphic、Quote和Unquote等,它们提供了额外的功能,如检查字符的可打印性、将字符串转换为带引号和转义字符的字符串字面值等。
strconv.Quote 函数用于将字符串转换为双引号括起来的、转义了特殊字符的Go字符串字面量。而 strconv.Unquote 函数则执行相反的操作,即解析一个被双引号括起来、可能包含转义字符的字符串。

示例

package main  import (  "fmt"  "strconv"  
)  func main() {  chars := []rune{'H', 'e', 'l', '\n', '♥', 127}  for _, char := range chars {  fmt.Printf("Character: %c, IsPrint: %v\n", char, strconv.IsPrint(char))  fmt.Printf("Character: %c, IsGraphic: %v\n", char, strconv.IsGraphic(char))  }  str := `路多辛的,"所思所想"!。`  quoted := strconv.Quote(str)  fmt.Println("Quoted: ", quoted)  unquoted, err := strconv.Unquote(quoted)  if err != nil {  panic(err)  }  fmt.Println("Unquoted: ", unquoted)  
}

在这里插入图片描述

注意事项
在使用Parse…系列函数时,一定要检查返回的错误值,以确保转换成功。
对于大整数或无符号整数,应使用FormatInt和ParseInt函数,并指定适当的基数和位数。
在处理浮点数时,注意精度和格式的控制。
strconv包中的函数主要用于基本类型和字符串之间的转换,对于复杂数据结构的序列化和反序列化,应考虑使用encoding/json、encoding/xml等包。

6. 总结

strconv包是Go语言中处理字符串和基本数据类型转换的重要工具。
通过本文,我们详细学习了strconv包中整数、浮点数、布尔值与字符串之间的转换方法,以及进制转换、追加到字节数组、引号处理和字符可打印性判断等高级功能。
这些功能在数据处理、网络通信、日志记录等多个方面都有广泛应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435027.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统】三、内存管理:2.虚拟内存管理(虚拟内存特:局部性原理、请求分页管理方式、页面置换算法)

七、虚拟内存管理 文章目录 七、虚拟内存管理1.常规存储器特征1.1一次性1.2驻留性 2.虚拟内存特征2.1局部性原理2.2多次性2.3对换性2.4虚拟性2.5虚拟存储器的容量 3.虚拟内存的实现❗3.1缺页率3.2请求分页(请求页表)3.2.1页表机制❗3.2.2缺页中断机构3.2…

猝发传输和非猝发传输

猝发传输和非猝发传输是两种不同的数据传输方式,主要区别在于数据传输的连续性以及数据包的发送方式。 猝发传输 (Burst Transmission): 定义: 猝发传输是指在一段时间内,大量数据包集中发送,然后在一段时间内没有数据传输,这种…

Facebook公共主页bug问题解决措施清单

在使用Facebook的过程中,许多用户可能会遇到一些让人困扰的BUG,这些问题往往会让人感到无奈。为了帮助大家更好地应对这些情况,本文将总结一些常见的BUG以及对应的解决方案,主要集中在公共主页的相关问题。如果感兴趣就请读下去吧…

uniapp 使用Vue3 setup引入 uniapp 的onReachBottom

在page.json中加入**“onReachBottonDistance”: 50**,这是距离底部多少开始触发 然后再对应的页面通过import将uniapp的api引入进去 dcloudio/uni-app是不用单独下载的,直接用就行 import {onReachBottom,} from dcloudio/uni-app;然后直接使用就好

【ArcGIS Pro实操第三期】多模式道路网构建(Multi-model road network construction)原理及实操案例

ArcGIS Pro实操第三期:多模式道路网构建原理及实操案例 1 概述1.1 原理 2 GIS实操2.1 新建文件并导入数据2.2 创建网络数据集2.3 设置连接策略(Setting up connectivity policies)2.4 添加成本(Adding cost attributes&#xff09…

【C++报错已解决】std::ios_base::sync_with_stdio

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

java项目之作业管理系统设计与实现源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的作业管理系统设计与实现源码。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 作业管理系统…

引入的pyside2后 Lib\site-packages\PySide2中没有pyside2-uic.exe

只有uic.exe 没有pyside2-uic.exe 去Scripts目录下查看就能找到

Unity实战案例全解析:RTS游戏的框选和阵型功能(1) 基础要素

本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程 【唐老狮】Unity实现 即时战略游戏 阵型功能 - 泰课在线 -- 志存高远,稳如泰山 - 国内专业的在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG - Powered…

架构师:消息队列的技术指南

1、简述 消息队列(Message Queue, MQ)是一种异步通信机制,允许系统的各个组件通过消息在彼此之间进行通信。消息队列通过解耦系统组件、缓冲高峰期请求和提高系统的可扩展性,成为分布式系统中不可或缺的一部分。 2、工作原理 消息队列的基本工作原理是生产者将消息发布到…

Wed前端--HTML基础

目录 一、开发工具 二、HTML文档结构 2.1头部head 2.1.1title标记 2.1.2元信息meta标记 具体实例 ​编辑 一、开发工具 最基础的开发工具是:HBuilder 二、HTML文档结构 HTML文档由头部head和主体body组成 头部head标记中可以定义标题样式,头部信…

初始C++模板

1.泛型编程 1.1什么事泛型编程 在学习C语言时,我们时常会有这样的烦恼: 在针对每一种不同的类型变量进行函数传参或者是运算处理时,我们总是编写不同的函数或者是进行不同的处理,才能达到目的,这时,我们…

(undone) 阅读 MapReduce 论文笔记

参考:https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf 摘要:简单介绍了 MapReduce 是在大型分布式系统上工作的 Introduction 的内容总结: 1.介绍背景:为什么我们需要分布式系统?MapReduce 的意义是哪些 2.简…

2024.9.26C++作业

1. 什么是虚函数,什么是纯虚函数? 1.虚函数在基类中声明,使用virtual关键字修饰成员函数,并且允许在派生类中重写。 2.在运行时,允许基类指针或者引用调用这个函数时,根据实际对象类型调用派生类&#xff…

大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

尚硅谷vue3+TypeScript笔记大全

源码及视频:通过百度网盘分享的文件:尚硅谷vue3 链接:https://pan.baidu.com/s/19zVM5Xsr1UP7tZ4D0mhVqA?pwdgmta 提取码:gmta 1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piec…

Qualcomm AI Hub模型优化1: Whisper-Base-En导出及问题解决

1 从Qualcomm AI Hub Module中选择Whisper-Base-En模块部署 1.1 进入module虚拟环境 python3 -m venv qai_hub_models_env && source qai_hub_models_env/bin/activate1.2 使用pip安装高通音频转录包 pip install "qai_hub_models[whisper_base_en]" 1.3…

人工智能对话系统/AI助理/PC/公众号/h5/小程序

>>>系统简述: GPTCMS基于TP6UniappVUE3开发,已集成文心一言、灵犀星火、ChatGLM(清华旗下)、讯飞星火(即将)、api2d、意间AI、ChatGPT、GPT3.5、GPT4、Stable Diffusion、MidJourney-V4、MidJour…

基于Python大数据可视化的民族服饰数据分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

第十届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)

一.题目分析 (1).题目 (2).题目分析 1.参考配置界面 注意上限和下限的调整,上限值必须大于下限值,低于下限LD2会闪烁,低于上限LD1会闪烁 2.按键功能分析 B1:显示界面和设置界面相互切…