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

news2024/11/15 8:58:53

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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 main

import (
    "fmt"
    "strconv"
)

//整形转字符串
func main() {
    intNum := 42
    //整形转字符串方法strconv.Itoa
    strFromInt := 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.coloradmin.cn/o/2185405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ProtoBuf快速上手

文章目录 创建 .proto文件编译 .proto文件编译后生成的文件序列化与反序列化的使用 此篇文章实现内容: 对一个通讯录的联系人信息,使用PB进行序列化,并将结果输出对序列化的内容使用PB进行反序列化,解析联系人信息并输出联系人信…

【成神之路】Ambari实战-015-代码生命周期-metainfo-category详解

1.Redis 集群 metainfo.xml 示例 <?xml version"1.0"?> <metainfo><schemaVersion>2.0</schemaVersion><services><service><!-- Redis 集群服务的基本信息 --><name>REDIS</name><displayName>Redi…

MongoDB的安装与增删改查基本操作

MongoDB是一种非关系型数据库&#xff0c;是NoSQL语言&#xff0c;但是又是最接近关系型数据库的。内部存储不是表结构&#xff0c;但是可以对数据进行表结构的操作。 一、安装 在官网&#xff1a;Download MongoDB Community Server | MongoDB下载系统对应的版本进行安装即可…

html+css+js实现Collapse 折叠面板

实现效果&#xff1a; HTML部分 <div class"collapse"><ul><li><div class"header"><h4>一致性 Consistency</h4><span class"iconfont icon-jiantou"></span></div><div class"…

UFS 3.1架构简介

整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。下…

通信工程学习:什么是TCP传输控制协议

TCP&#xff1a;传输控制协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是因特网协议套件中最重要的协议之一&#xff0c;它为应用程序提供了可靠、面向连接的通信服务。以下是TCP协议的详细解释&#xff1a; 一、TCP传输控制协议的…

双十一有哪些值得入手的好物?这五款宝藏好物不容错过!

在这个金秋送爽、收获满满的季节里&#xff0c;我们迎来了万众瞩目的双十一购物狂欢节。这不仅仅是一场简单的消费盛宴&#xff0c;更是每一位消费者期待已久、精心筹备的年度购物盛典。随着电商平台的不断革新与优惠力度的持续加码&#xff0c;双十一已经从一个简单的促销日成…

使用百度文心智能体创建多风格表情包设计助手

文章目录 一、智能定制&#xff0c;个性飞扬二、多元风格&#xff0c;创意无限 百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&…

单目3d重建DUSt3R 笔记

目录 DUSt3R 三维重建 报错RecursionError: maximum recursion depth exceeded in comparison 报错 numpy.core.multiarray failed to import 报错Numpy is not available 解决 升级版mast3r 速度变慢 修改了参数设置脚本&#xff1a; 测试效果 操作技巧 DUSt3R 三维重…

[已解决] Install PyTorch 报错 —— OpenOccupancy 配环境

目录 关于 常见的初始化报错 环境推荐 torch, torchvision & torchaudio cudatoolkit 本地pip安装方法 关于 OpenOccupancy: 语义占用感知对于自动驾驶至关重要&#xff0c;因为自动驾驶汽车需要对3D城市结构进行细粒度感知。然而&#xff0c;现有的相关基准在城市场…

torchvision.transforms.Resize()的用法

今天我在使用torchvision.transforms.Resize()的时候发现&#xff0c;一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面&#xff0c;torchvision.transforms.Resize((size,size))&#xff0c;大家都很清楚&#xff0c;会将图像的h和w大小都变成size。 但是…

【python实操】python小程序之过七游戏以及单词单复数分类

引言 python小程序之过7游戏、单词单复数分类 文章目录 引言一、过7游戏1.1 题目1.2 代码1.2.1 while循环1.2.2 for循环1.2.3 调用函数形式 1.3 代码解释 二、单词单复数分类2.1 题目2.2 代码2.3 代码解释 三、思考3.1 过七游戏3.2 单词单复数分类 一、过7游戏 1.1 题目 7的倍…

大模型 LLaMA-Omni 低延迟高质量语音交互,开源!

最近这一两周看到不少互联网公司都已经开始秋招发放Offer。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球…

python-patterns:Python 设计模式大全

python-patterns 是一个开源的 Python 项目&#xff0c;它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案&#xff0c;通过使用设计模式&#xff0c;开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…

GraphEval: A Knowledge-Graph Based LLM Hallucination Evaluation Framework

文章目录 题目摘要引言问题陈述相关工作GraphEval:我们的评估方法使用LLM构建知识GraphCorrect:使用GraphEval纠正幻觉实验讨论结论 题目 GraphEval:一个基于知识图的LLM幻觉评估框架 论文地址&#xff1a;https://arxiv.org/abs/2407.10793 摘要 评估大型语言模型(LLM)响应和…

【计算机科研方法指南】- 读书笔记《学术咸鱼自救指南》+于老师科研课

前言简介 因为自己在做计算机科研的时候&#xff0c;一开始很不顺利&#xff0c;所以专门去研究了一些具体的计算机科研方法。这里的方法主要参考了两个资料&#xff0c;一个是《学术“咸鱼”自救指南》&#xff0c;一个是于静老师科研课。 《学术“咸鱼”自救指南》是作者钱…

【微服务】组件、基础工程构建(day2)

组件 服务注册和发现 微服务模块中&#xff0c;一般是以集群的方式进行部署的&#xff0c;如果我们调用的时候以硬编码的方式&#xff0c;那么当服务出现问题、服务扩缩容等就需要对代码进行修改&#xff0c;这是非常不好的。所以微服务模块中就出现了服务注册和发现组件&…

视频创作黑科技!CogVideoX秒生成艺术视频

视频创作黑科技&#xff01;CogVideoX秒生成艺术视频 CogVideoX上线啦&#xff01;&#x1f389; 它能把文字和图片变成惊艳视频&#x1f3a5;。CogVideoX-5B如同好莱坞导演&#xff0c;快速生成高质量内容⚡&#xff0c;完美捕捉创意细节✨。让你轻松成为视频创作大师&#x…

Linux命令--03----帮助类命令、开关机类命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.帮助类命令man获取帮助信息help获得shell内置命令的帮助信息 2.开关机类命令2.1 开关机命令一般Linux不会经常进行关机操作,正确的关机流程为: sync>shutdown&…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性&#xff0c;有一道比较经典的题&#xff1a;如何使用UDP实现可靠传输&#xff0c;通过应用程序的代码&#xff0c;完成可靠传输的过程&#xff1f; 原则&#xff0c;TCO有啥就吹啥&#xff0c;引入滑动窗口&#xff0c;引入流量控制&#x…