详解一下Go语言中的ParseInt
✅ 函数签名
func ParseInt(s string, base int, bitSize int) (i int64, err error)
参数名 | 类型 | 作用 |
---|---|---|
s | string | 要转换的数字字符串,比如 "123" 、"0x1F" 、"ff" |
base | int | 指定进制,常用的有 2(二进制)、10(十进制)、16(十六进制) |
bitSize | int | 指定目标整数的位数:0 、8 、16 、32 或 64 (决定返回值的范围和溢出判断) |
bitSize 决定了解析结果应符合哪个整数类型范围:
0 或 64:输出为 int64 (当 bitSize 传入 0 时,表示你希望返回值是 int 类型对应的系统默认位数(通常是 int64 或 int32,取决于你的平台)。)
32:结果不能超出 int32 范围
16:结果不能超出 int16 范围
8:结果不能超出 int8 范围
返回值 | 类型 | 说明 |
---|---|---|
i | int64 | 成功转换后的十进制整数 |
err | error | 如果格式错误或溢出,返回错误 |
该函数将输入的字符串转换成十进制,但你可以向它输入任何可以接收的进制数
num, err := strconv.ParseInt("12345", 10, 64) //十进制
fmt.Println(num) // 输出:12345
num, err := strconv.ParseInt("1a", 16, 64)//十六进制
fmt.Println(num) // 输出:26(1a 十六进制 = 26 十进制)
num, err := strconv.ParseInt("1011", 2, 64)//二进制
fmt.Println(num) // 输出:11
即第二个参数base是传入的字符串的进制,但输出的最终结果只会是十进制
⛔ 错误输入
num, err := strconv.ParseInt("xyz", 10, 64)
if err != nil {fmt.Println("出错:", err) // invalid syntax
}
⛔ 进制范围超出
num, err := strconv.ParseInt("9999999999999", 10, 8) // 超出 int8 范围
if err != nil {fmt.Println("出错:", err) // value out of range
}
自动识别进制:用 strconv.ParseInt 的兄弟函数 strconv.Atoi() 或 strconv.ParseUint()。
i, err := strconv.Atoi("123") // 只能解析十进制(等价于 ParseInt(s, 10, 0))
带前缀的字符串(如 0x, 0b)不被 ParseInt 自动识别,如果你想要自动识别十六进制/八进制等前缀(如 0x, 0o, 0b),可以使用:
i, err := strconv.ParseInt("0xff", 0, 64)
其中 base = 0 会启用“自动识别前缀”的模式