Golang中使用ParseInt()/Atoi()将字符串转换为int类型的方法
Golang中使用ParseInt()/Atoi()将字符串转换为int类型的方法 大家好!
关于使用 strconv 包进行 string 到 int 转换的问题。
首先,strconv.Atoi() 返回的是 int 类型。
其次,看起来 strconv.ParseInt() 从不返回 int 类型。然而,语言定义中说:
“bitSize 参数指定结果必须适合的整数类型。位大小 0、8、16、32 和 64 分别对应 int、int8、int16、int32 和 int64。”
那么,如果我这样做:
n, _ := strconv.ParseInt("42", 10, 0)
n 应该是一个 int,而不是 int64。对吗?但是,它是 int64。
有什么想法吗?
谢谢。
更多关于Golang中使用ParseInt()/Atoi()将字符串转换为int类型的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
也许我需要把这个发到语言定义论坛。这些不符合规范。位数为0应该返回一个"int",无论是32位还是64位取决于机器,但它应该是一个"int"。
更多关于Golang中使用ParseInt()/Atoi()将字符串转换为int类型的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
bitSize参数指定了结果必须适配的整数类型
这并不意味着实际使用了该类型。
也许可以尝试在 32 位系统上运行以下代码,看看会发生什么。
func main() {
fmt.Println("hello world")
}
首先,非常感谢您的回复。
不过,在文档的引文中(重复如下):
“
bitSize参数指定结果必须适配的整数类型。位大小 0、8、16、32 和 64 分别对应 int、int8、int16、int32 和 int64。”
第二句话暗示 bitsize 为 0 时对应 int。
我哪里理解错了?谢谢。
bitSize参数指定了结果必须适配的整数类型。
这意味着 int64 类型的结果可以安全地转换到你的整数类型:
i64, _ := strconv.ParseInt("42", 10, 64)
或者
i64, _ := strconv.ParseInt("42", 10, 32)
var i32 int32 = i64 // 转换为 int32
或者
i64, _ := strconv.ParseInt("42", 10, 0)
var i int = i64 // 转换为 int
int 类型根据你的系统可能是 int32 或 int64。通过将 bitSize 设置为 0,你让 ParseInt 为你选择合适的类型(32位或64位)。
strconv.ParseInt() 函数确实总是返回 int64 类型,无论你指定的 bitSize 参数是多少。bitSize 参数的作用是限制解析的数值范围,使其不超过指定整数类型的范围,但返回值类型始终是 int64。
文档中提到的“对应”是指数值范围的对应,而不是返回类型的对应。函数内部会将解析后的值转换为 int64,但会根据 bitSize 进行范围检查。
如果你需要得到 int 类型,你有两个选择:
- 使用
strconv.Atoi()- 这是最直接的方法,它内部调用ParseInt并转换为int:
n, err := strconv.Atoi("42")
// n 的类型是 int
- 使用
ParseInt()并显式转换:
n64, err := strconv.ParseInt("42", 10, 0)
n := int(n64) // 显式转换为 int
bitSize 参数的实际作用示例:
// 这些都会返回 int64,但会进行不同的范围检查
n1, _ := strconv.ParseInt("127", 10, 8) // 必须适合 int8 范围
n2, _ := strconv.ParseInt("32767", 10, 16) // 必须适合 int16 范围
n3, _ := strconv.ParseInt("42", 10, 0) // 必须适合 int 范围(当前平台)
所以你的观察是正确的:ParseInt("42", 10, 0) 返回的是 int64 类型,而不是 int。如果你需要 int 类型,应该使用 Atoi() 或者进行显式类型转换。

