登录
首页 >  Golang >  Go问答

strconv.ParseInt 无法解析以 0 开头的数字

来源:stackoverflow

时间:2024-02-25 16:27:26 292浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《strconv.ParseInt 无法解析以 0 开头的数字》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我目前在 go 中解析一些以 0 开头的数字时遇到问题。

fmt.Println(strconv.ParseInt("0491031", 0, 64))

0 strconv.parseint:解析“0491031”:语法无效

go演示:https://go.dev/play/p/tav7ieoyi8i

我认为这是由于一些基本转换错误造成的,但我不知道如何修复它。 如果您需要更多详细信息,我在使用 gocsv 解析 5gb+ csv 文件时遇到此错误。

[此错误是由 gocsv 库引起的,该库不允许为您要解析的数字指定基数。]


正确答案


引自strconv.ParseInt()

如果基参数为 0,则真正的基数由符号后面的字符串前缀(如果存在)隐含:2 表示“0b”,8 表示“0”或“0o”,16 表示“0x”,以及10 否则。此外,仅对于基数为 0 的参数,允许使用下划线字符,如 go 语法中整数文字的定义。

您正在为 base 传递 0,因此将从字符串值推断要解析的基数,并且由于它以 '0' 开头,后跟非 '0',因此您的数字被解释为八进制 (8) 数字,并且数字 9 在那里无效。

请注意,这会起作用:

fmt.println(strconv.parseint("0431031", 0, 64))

和输出(在 Go Playground 上尝试一下):

143897 

(八进制 431031 等于十进制 143897。)

如果您的输入以 10 为基数,则为 base 传递 10

fmt.println(strconv.parseint("0491031", 10, 64))

然后输出将是(在 Go Playground 上尝试):

491031 

到这里,我们也就讲完了《strconv.ParseInt 无法解析以 0 开头的数字》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>