登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-28 15:17:49 155浏览 收藏

哈喽!今天心血来潮给大家带来了《如何将长十六进制字符串解析为 uint》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

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

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

"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"

起初我试图使用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)

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)

以上就是《如何将长十六进制字符串解析为 uint》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>