详解一下Go语言中的ParseInt

发布于:2025-05-23 ⋅ 阅读:(17) ⋅ 点赞:(0)

✅ 函数签名

func ParseInt(s string, base int, bitSize int) (i int64, err error)
参数名 类型 作用
s string 要转换的数字字符串,比如 "123""0x1F""ff"
base int 指定进制,常用的有 2(二进制)、10(十进制)、16(十六进制)
bitSize int 指定目标整数的位数:08163264(决定返回值的范围和溢出判断)

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 会启用“自动识别前缀”的模式


网站公告

今日签到

点亮在社区的每一天
去签到