共计 1002 个字符,预计需要花费 3 分钟才能阅读完成。
一、简介
itoa 全称是 int 桶 ascii
在 c 语言,go 语言等,都有原生的实现反对。
我在源码 src/os/str.go
发现了 go 的实现
// 简略的实现 itoa 防止再去调用 strconv. | |
package os | |
// Convert integer to decimal string | |
func itoa(val int) string { | |
if val < 0 {return "-" + uitoa(uint(-val)) | |
} | |
return uitoa(uint(val)) | |
} | |
// Convert unsigned integer to decimal string | |
func uitoa(val uint) string { | |
if val == 0 { // avoid string allocation | |
return "0" | |
} | |
var buf [20]byte // big enough for 64bit value base 10 | |
i := len(buf) - 1 | |
for val >= 10 { | |
q := val / 10 | |
buf[i] = byte('0' + val - q*10) | |
i-- | |
val = q | |
} | |
// val < 10 | |
buf[i] = byte('0' + val) | |
return string(buf[i:]) | |
} |
二、源码浏览
1、辨别正负号
// 把 int 类型转化成 10 进制对应的 string | |
func itoa(val int) string { | |
if val < 0 {return "-" + uitoa(uint(-val)) | |
} | |
return uitoa(uint(val)) | |
} |
先判断是否小于 0,来增加“-”负号
2、把 int 转成对应的 10 进制 string
2.1、如果整数 0 返回 ”0″
2.2、生成一个 int 对应的字符数组,比方 1234,变成 byte[‘1′,’2′,’3′,’4′,’5’]
2.3、把字符数组 byte[‘1′,’2′,’3′,’4′,’5’] 变成 string
// Convert unsigned integer to decimal string | |
func uitoa(val uint) string { | |
if val == 0 { // 如果整数 0 返回 "0" | |
return "0" | |
} | |
var buf [20]byte // big enough for 64bit value base 10 | |
i := len(buf) - 1 | |
for val >= 10 { | |
q := val / 10 | |
buf[i] = byte('0' + val - q*10) | |
i-- | |
val = q | |
} | |
// val < 10 | |
buf[i] = byte('0' + val) | |
return string(buf[i:]) | |
} |
正文完