为了账号安全,请及时绑定邮箱和手机立即绑定

如果数字以 0 开头,strconv.ParseInt 失败

如果数字以 0 开头,strconv.ParseInt 失败

Go
烙印99 2022-10-17 19:29:39
我目前在解析 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个赞

引用自strconv.ParseInt()

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

您正在传递0for 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>


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号