Luc*_*tto 1 type-conversion go
我目前在解析 Go 中一些以 0 开头的数字时遇到问题。
fmt.Println(strconv.ParseInt("0491031", 0, 64))
Run Code Online (Sandbox Code Playgroud)
0 strconv.ParseInt:解析“0491031”:语法无效
GoPlayground:https://go.dev/play/p/TAv7IEoyI8I
我认为这是由于一些基本转换错误造成的,但我不知道如何修复它。如果您需要更多详细信息,我在使用 gocsv 解析 5GB+ csv 文件时遇到此错误。
[此错误是由GoCSV 库引起的,该库不允许为您要解析的数字指定基数。]
如果基参数为 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))
Run Code Online (Sandbox Code Playgroud)
并输出(在Go Playground上尝试一下):
143897 <nil>
Run Code Online (Sandbox Code Playgroud)
(八进制431031等于143897十进制。)
如果您的输入以 10 为基数,则传递10for base:
fmt.Println(strconv.ParseInt("0491031", 10, 64))
Run Code Online (Sandbox Code Playgroud)
491031 <nil>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6460 次 |
| 最近记录: |