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

时间:2017-11-15 19:25:21

标签: go

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

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

"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"

起初我尝试使用ParseUint(),但由于它支持的最高值为int64,因此我的号码太大了。

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

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

1 个答案:

答案 0 :(得分:6)

使用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)