我目前在解析 Go 中以 0 开头的一些数字时遇到问题。fmt.Println(strconv.ParseInt("0491031", 0, 64))0 strconv.ParseInt:解析“0491031”:语法无效GoPlayground:https ://go.dev/play/p/TAv7IEoyI8I我认为这是由于一些基本转换错误,但我不知道如何修复它。如果您需要更多详细信息,我在使用 gocsv 解析 5GB+ csv 文件时遇到此错误。[此错误是由GoCSV 库引起的,该库不允许为要解析的数字指定基数。]
1 回答

忽然笑
TA贡献1806条经验 获得超5个赞
如果 base 参数为 0,则真正的基数由符号后面的字符串前缀(如果存在)暗示:2 表示“0b”,8 表示“0”或“0o”,16 表示“0x”,否则为 10。此外,仅对于以 0 为基数的参数,允许使用 Go 语法为整数文字定义的下划线字符。
您正在传递0
for base
,因此将从字符串值推断要解析的基数,并且由于它以 a 开头,'0'
后跟 non '0'
,因此您的数字被解释为八进制 (8) 数字,并且该数字9
在那里无效。
请注意,这将起作用:
fmt.Println(strconv.ParseInt("0431031", 0, 64))
并输出(在Go Playground上试试):
143897 <nil>
(八进制431031
等于143897
十进制。)
如果您的输入以 10 为基数,请10
传递base
:
fmt.Println(strconv.ParseInt("0491031", 10, 64))
然后输出将是(在Go Playground上尝试):
491031 <nil>
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消