如何将长十六进制字符串解析为uint

Nik*_*kel 3 go

我正在提取长十六进制字符串形式的数据,我需要将其转换为十进制表示法,截断18位小数,然后以JSON格式提供.

例如,我可能有十六进制字符串:

"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"
Run Code Online (Sandbox Code Playgroud)

起初我试图使用ParseUint(),但是因为它支持的最高int64,我的数字最终太大了.

转换和截断后的此示例导致10 ^ 6.然而,有些情况下这个数字可能高达10 ^ 12(意味着预截断10 ^ 30!).

攻击这个的最佳策略是什么?

Jim*_*imB 6

使用math/big处理大于64位的数字.

Int.SetString示例:

s := "d3c21bcecceda1000000"
i := new(big.Int)
i.SetString(s, 16)
fmt.Println(i)
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/vf31ce93vA

这些math/big类型也支持encoding.TextMarshalerfmt.Scanner接口.

例如

i := new(big.Int)
fmt.Sscan("0x000000d3c21bcecceda1000000", i)
Run Code Online (Sandbox Code Playgroud)

要么

i := new(big.Int)
fmt.Sscanf("0x000000d3c21bcecceda1000000", "0x%x", i)
Run Code Online (Sandbox Code Playgroud)