当前位置: 代码网 > it编程>前端脚本>Golang > go语言实现字符串与其它类型转换(strconv包)

go语言实现字符串与其它类型转换(strconv包)

2024年11月03日 Golang 我要评论
与字符串相关的类型转换都是通过 strconv 包实现的strconv包概述strconv是两个单词的缩写。string convert = strconvstrconv包位于go语言的标准库中,它提

与字符串相关的类型转换都是通过 strconv 包实现的

strconv包概述

strconv是两个单词的缩写。string convert = strconv

strconv包位于go语言的标准库中,它提供了一系列用于字符串和基本数据类型之间转换的函数。这些函数主要包括以下几种类型:

  • 将基本数据类型转换为字符串的函数,如itoa、formatint、formatfloat、formatbool等。
  • 将字符串解析为基本数据类型的函数,如atoi、parseint、parsefloat、parsebool等。
  • 附加到已存在字节数组的函数,如appendint、appendfloat、appendbool等。
  • 其他辅助函数,如isprint、isgraphic、quote、unquote等。

将字符串转换为其他基础类型的过程叫做解析parse,其他基础类型转换为字符串的过程成为格式化format

1、string与int类型转换

1.1、atoi()函数用于将字符串类型的整数转换为int类型
strconv.atoi(s string) (i int, err error)

由于string可能无法转换为int,所以有两个返回值:第一个返回值是转换成的int值,第二个返回值判断是否转换成功

//var age ="22岁" 转换失败
var age ="22" // 转换成功
age1,err:=strconv.atoi(age)
if err != nil {
    fmt.println("转换出错")
    return
}else {
    fmt.printf("类型是:%t,值是:%d",age1,age1)
}

1.2、itoa()函数用于将int类型数据转换为对应的字符串表示
strconv.itoa(i int) string

i := 100
s := strconv.itoa(i)
fmt.println("类型是:%t 值是:%#v\n", s2, s2) // 类型是:string 值是:"999"

2、parse系列函数

parse类函数用于转换字符串为给定类型的值:parsebool()、parsefloat()、parseint()、parseuint()

2.1、parsebool()strconv.parsebool(str string) (value bool, err error)

返回字符串表示的bool值,它只接受值为1、0、t、f、t、f、true、false、true、false、true、false的字符串,否则返回错误

fmt.println(strconv.parsebool("1"))    // true
fmt.println(strconv.parsebool("t"))    // true
fmt.println(strconv.parsebool("t"))    // true
fmt.println(strconv.parsebool("true")) // true
fmt.println(strconv.parsebool("true")) // true
fmt.println(strconv.parsebool("true")) // true
fmt.println(strconv.parsebool("0"))     // false
fmt.println(strconv.parsebool("f"))     // false
fmt.println(strconv.parsebool("f"))     // false
fmt.println(strconv.parsebool("false")) // false
fmt.println(strconv.parsebool("false")) // false
fmt.println(strconv.parsebool("false")) // false

2.2、parseint()返回字符串表示的整数值,接受正负号
strconv.parseint(s string, base int, bitsize int) (i int64, err error)

  • s:要转换的字符串
  • base:指定进制(2进制到36进制) ,当base=0的时候,表示根据string的前缀来判断以什么进制去解析:0x开头的以16进制的方式去解析,0开头的以8进制方式去解析,其它的以10进制方式解析
  • bitsize:起到string转int时的一个限制作用,有效值为0、8、16、32、64。如果超过了bitsize的限制作用就会将报错信息输出到error中
  • 返回转换后的结果和转换失败的错误
//转换成功
s1 := "123"
ps1,err := strconv.parseint(s1, 10, 8) // 指将s1转换为10进制数,8指的是转换结果最大值不超过int8,即127
if err != nil{
	fmt.printf("err is %v\n", err)
	return
}else{
	fmt.printf("类型: %t ,值: %d", ps1, ps1) //类型: int64 ,值: 123
}

//转换失败
s1 := "129" // 超过int8最大值127
ps1,err := strconv.parseint(s1, 10, 8) // 指将s1转换为10进制数,8指的是转换结果最大值不超过int8,即127
if err != nil{
	fmt.printf("err is %v\n", err)
	return
}else{
	fmt.printf("类型: %t ,值: %d", ps1, ps1) //err is strconv.parseint: parsing "129": value out of range
}

2.3 parseuint()parseuint类似parseint但不接受正负号,用于无符号整型
strconv.parseuint(s string, base int, bitsize int) (i int64, err error)

2.4、parsefloat()strconv.parsefloat(s string, bitsize int) (f float64, err error)

  • s:要转换的字符串
  • bitsize:指定浮点类型(32:float32、64:float64)
  • 如果 s 是合法的格式,而且接近一个浮点值,则返回浮点数的四舍五入值
  • 如果 s 不是合法的格式,则返回“语法错误”
  • 如果转换结果超出 bitsize 范围,则返回“超出范围”
	f := "1.2342332"
	f1, err := strconv.parsefloat(f, 64)
	if err != nil {
		fmt.printf("err is %v\n", err)
		return
	} else {
		fmt.printf("类型为:%t,值为:%f", f1, f1)
	} //类型为:float64,值为:1.234230

3、format系列函数

将给定类型格式化为string类型数据

3.1、formatbool()用于将布尔类型的值转换为字符串类型
strconv.formatbool(b bool) string

  • 如果 b 的值为 true,则将返回字符串 “true”,否则将返回 “false”
fmt.println(strconv.formatbool(0 < 1)) // true
fmt.println(strconv.formatbool(0 > 1)) // false
fmt.println(strconv.formatbool(true)) // 将true转换为字符串

3.2、formatint()strconv.formatint(i int64, base int) string

  • i :要转换的整数类型
  • base:2-32进制,结果中会使用小写字母’a’到’z’表示大于10的数字
s3 := strconv.formatint(-2, 16) 
fmt.printf("类型为:%t,值为:%#v",s3,s3) // 类型为:string,值为:"-2"

3.3、formatuint()是formatint的无符号整数版本
strconv.formatuint(i int64, base int) string

3.4、formatfloat()将浮点数表示为字符串并返回
strconv.formatfloat(f float64, fmt byte, prec, bitsize int) string

  • f:要转换的浮点数
  • fmt表示格式:
    ‘b’ (-ddddp±ddd,二进制指数)
    ‘e’ (-d.dddde±dd,十进制指数)
    ‘e’ (-d.dddde±dd,十进制指数)
    ‘f’ (-ddd.dddd,没有指数)
    ‘g’ (‘e’:大指数,‘f’:其它情况)
    ‘g’ (‘e’:大指数,‘f’:其它情况)
  • prec控制精度
    如果格式标记为 ‘e’,‘e’和’f’,则 prec 表示小数点后的数字位数
    如果格式标记为 ‘g’,‘g’,则 prec 表示总的数字位数(整数部分+小数部分)
f := 100.123456789

fmt.println(strconv.formatfloat(f, 'g', 5, 64))
// 100.12
fmt.println(strconv.formatfloat(f, 'g', 5, 64))
// 100.12
fmt.println(strconv.formatfloat(f, 'f', 5, 64))
// 100.12346
fmt.println(strconv.formatfloat(f, 'e', 5, 64))
// 1.00123e+02
fmt.println(strconv.formatfloat(f, 'e', 5, 64))
// 1.00123e+02

4、append系列

append类的函数和format类的函数工作方式类似,只不过将转换后的结果追加到一个slice中

4.1、appendbool()strconv.appendbool(num1 []byte, num2 bool) []byte

  • 根据num2的值将bool(即true或false)追加到num1中,并返回扩展的缓冲区
val := []byte("is bool: ")
val = strconv.appendbool(val, true)    
fmt.println(string(val)) // is bool: true

4.2、appendfloat()strconv.appendfloat(dst []byte, f float64, fmt byte, prec int, bitsize int) []byte

  • 将浮点数 f 转换为字符串值,并将转换结果追加到 dst 的尾部
  • 返回追加后的 []byte
val1 := []byte("float32值:")
val1 = strconv.appendfloat(val1,4.5683568954,'e',-1,32)
fmt.println(string(val1))
val2 := []byte("float64值:")
val2 = strconv.appendfloat(val2,6.7415678653,'e',-1,64)
fmt.println(string(val2))

4.3、appendint()将 int 型整数 i 转换为字符串形式,并追加到 dst 的尾部
strconv.appendint(dst []byte, i int64, base int) []byte

  • i:要转换的字符串
  • base:进位制
  • 返回追加后的 []byte
val1 := []byte("整数值(进制10): ")
val1 = strconv.appendint(val1, -35, 10)
fmt.println(string(val1)) //整数值(进制10): -35
  
val2 := []byte("整数值(进制16): ")
val2 = strconv.appendint(val2, -44, 16)
fmt.println(string(val2)) //整数值(进制16): -2c

4.4、appenduint()是appendint的无符号整数版本

5、其它

5.1、isprint()返回一个字符是否是可打印的,r必须是:字母(广义)、数字、标点、符号、ascii空格

res:=strconv.isprint('n')  // true 可打印
res:=strconv.isprint('\n')  // false  不可打印

5.2、canbackquote()返回字符串s是否可以不被修改的表示为一个单行的、没有空格和tab之外控制字符的反引号字符串

	res:=strconv.canbackquote(`lxx is nb`) // true
	res:=strconv.canbackquote(`lxx is
nb`) // false :因为带回车
	fmt.println(res)

到此这篇关于go语言实现字符串与其它类型转换(strconv包)的文章就介绍到这了,更多相关go 字符串转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com