我正在提取长十六进制字符串形式的数据,我需要将其转换为十进制表示法,截断18位小数,然后以JSON格式提供.
例如,我可能有十六进制字符串:
"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"
Run Code Online (Sandbox Code Playgroud)
起初我试图使用ParseUint(),但是因为它支持的最高int64,我的数字最终太大了.
转换和截断后的此示例导致10 ^ 6.然而,有些情况下这个数字可能高达10 ^ 12(意味着预截断10 ^ 30!).
攻击这个的最佳策略是什么?
使用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.TextMarshaler和fmt.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)
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |