如何使用 go 将十六进制转换为整数

Sar*_*mar 7 go

我使用下面提到的代码使用 go 将十六进制值转换为十进制

numberStr := strings.Replace(s, "0x", "", -1)
    numberStr = strings.Replace(numberStr, "0X", "", -1)
    n, err := strconv.ParseUint(numberStr, 16, 64)
    if err != nil {
        panic(err)
    }
    return n 
Run Code Online (Sandbox Code Playgroud)

十六进制值为:0x340aad21b3b700000

但抛出错误:strconv.ParseUint: parsing "340aad21b3b700000": value out of range

您能建议任何替代解决方案吗?

Den*_*lin 8

uint64 的最大值是 0xFFFF FFFF FFFF FFFF,因此要使用溢出值,您必须求助于标准库的 math/big 包:

import "math/big"

...

n := new(big.Int)
n.SetString(numberStr, 16)
Run Code Online (Sandbox Code Playgroud)

继续查看包文档

  • 注意:如果要传递以“0x”为前缀的字符串,则需要传递基数0而不是16;在这种情况下,golang 将根据前缀选择基本身。然而,如果同时传递 0x 前缀的字符串和显式基数 16,golang 将生成值 0。 (3认同)