问题
如何把“123”转化为一个十进制的int整型?go语言自身提供了strconv包,但是性能太低,耗时太长,因此手动写一个算法提升性能。
期望输出
input:“123”
output:123
思路
- 遍历数组用&运算算出结果
- 把每次的运算结果累加
- 在做乘法运算
代码一
//Str2Int 数字必须是十进制数 0-9
func Str2Int(s string) int {
var num int
l := len(s)
for i := 0; i < l; i++ {
num = num*10 + int(s[i] -48)
}
fmt.Println(num)
return num
}
- 转化为ascii值减去0值得ascii也就是48
- 3的ascii是51,0的ascii是48
- 51-48=3求出个位数3*10转成十位数
- 结果累加
代码二
//Str2Int 数字必须是十进制数 0-9
func Str2Int(s string) int {
var num int
l := len(s)
for i := 0; i < l; i++ {
num = num*10 + (int(s[i]) & 0xf)
}
fmt.Println(num)
return num
}
步骤解析
- 把减去48变为&运算加快速度
- 结果累加
- 第二种方法比第一种快1/4
结束
后面还有字符串转十六进制高性能转换方法,原创帖转载请联系博主,友情链接有我的博客和github地址,欢迎相互沟通学习!