golang string转int8_Go教程:23 string转换int类型方法对比

Go教程:23 string转换int类型方法对比

Go语言时一个强类型的语言,但是强类型的语言有也强类型的语言的烦恼.这个烦恼就是类型转换,

接下来我们就讲解一下怎么把 string 类型变量转换成 integer 类型变量.

1. 性能最佳的方式: strconv.ParseInt(…)

strconv 包实现了字符串与数字(整数,浮点数等)之间的互相转换.

strconv.ParseInt()的bitSize参数不会将字符串转换为您选择的类型,

而只是在此处将结果限制为特定的“位”,如果想要得到您要的int类型必须手动转换类型.

转换成十进制int64strconv.ParseInt("2345",10,64)

转换成八进制int32strconv.ParseInt("0xFF",0,32)

转换成16进制int64strconv.ParseInt("FF",16,64)

packagemainimport("fmt""strconv")funcmain(){fmt.Println(strconv.ParseInt("-12",10,0))// -12 fmt.Println(strconv.ParseInt("0xFF",0,0))// 255 fmt.Println(strconv.ParseInt("FF",16,0))// 255 fmt.Println(strconv.ParseUint("12",10,0))// 12 fmt.Println(strconv.ParseInt("0xFF",10,0))// 0 strconv.ParseInt: parsing "0xFF": invalid syntaxfmt.Println(strconv.ParseUint("-12",10,0))// 0 strconv.ParseUint: parsing "-12": invalid syntax}

输结果

-12

255

255

12

0 strconv.ParseInt: parsing "0xFF": invalid syntax

0 strconv.ParseUint: parsing "-12": invalid syntax

2. 最灵活性的方法: fmt.Sscanf(…)

fmt.Sscanf为格式字符串提供了更大的灵活性,

您可以在输入中指定数字格式(例如宽度,基数等)以及其他额外的字符string,

这对于解析包含数字的自定义字符串非常有用,例如,如果以”id:00123”您有前缀的形式提供输入,

“id:”并且数字固定为5位数字,如果较短则用零填充,这很容易解析,如下所示:

s:="id:00123"variintif_,err:=fmt.Sscanf(s,"id:%5d",&i);err==nil{fmt.Println(i)// Outputs 123}

3. 性能还行的方法: strconv.Atoi(…)

strconv 包实现了字符串与数字(整数,浮点数等)之间的互相转换.

很多朋友都不知道Atoi代表什么意思, A 就是ASCII, i就是integer,所以Atoi= ASCII to integer.

ItoA= Integer to ASCII.

实际上strconv.Atoi 还是调用 strconv.ParseInt

packagemain//xiaorui.ccimport("strconv")funcmain(){i,err:=strconv.Atoi("8888")iferr!=nil{panic(err)}i+=3println(i)s:=strconv.Itoa(333)s+="3"println(s)}

4. 三种方法benchmark

atoi_test.go

packagemainimport"fmt"import"strconv"import"testing"varnum=8568452varnumstr="8568452"//测试 strconv.ParseIntfuncBenchmarkStrconvParseInt(b*testing.B){num64:=int64(num)fori:=0;i

执行benchmark: go test -bench=. atoi_test.go

ns/op 代表每次操作消耗多少纳秒.

BenchmarkStrconvParseInt-810000000017.1ns/opBenchmarkAtoi-810000000019.4ns/opBenchmarkFmtSscan-82000000693ns/opPASSokcommand-line-arguments5.797s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值