小编典典

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

go

我要提取长十六进制字符串形式的数据,我需要将其转换为十进制表示法,截断18个小数位,然后在JSON中使用。

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

"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"

最初我尝试使用ParseUint(),但是由于它支持的最高级别int64,我的数量最终太大了。

转换和截断后的示例为10 ^ 6。但是,在某些情况下,此数字最多可以为10 ^ 12(意味着截断为10 ^ 30!)。

攻击此问题的最佳策略是什么?


阅读 272

收藏
2020-07-02

共1个答案

小编典典

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

Int.SetString示例:

s := "d3c21bcecceda1000000"
i := new(big.Int)
i.SetString(s, 16)
fmt.Println(i)

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

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

例如

i := new(big.Int)
fmt.Sscan("0x000000d3c21bcecceda1000000", i)

要么

i := new(big.Int)
fmt.Sscanf("0x000000d3c21bcecceda1000000", "0x%x", i)
2020-07-02