gpt4 book ai didi

go - 访问未导出的函数 `nat.string`

转载 作者:IT王子 更新时间:2023-10-29 01:34:07 25 4
gpt4 key购买 nike

我想将 big.Int 转换为简单的 base32。不是标准的 base32 东西,比如 base32 实现的 RFC 4648 也不是 zBase32 也不是 Crockford 我想要简单的普通 5 - 每个字符的位数 0-9A-V 字符集。

我知道 base32 包,但它并没有做我想做的事——它在标准的 32 进制数字中构建结果,并带有填充和我不想要的东西。当然,我可以使用它并撕下尾随的“=”字符并破解剩下的内容,但这似乎是一个残酷的解决方案。

有一个 big.SetString(string, base) 可以解析字符串形式的 base32 数字,但没有反向 - 这正是我真正想要的,一个 big .GetString(base) 类似于 Java BigInteger.toString(int base)

但是,有一个 nat.string 可以完全我想要的。我怎样才能访问它?

有没有一种方法可以手动扩展 big 来实现 big.GetString(base),它可以简单地调用 nat.string 字符集?

有没有一种方法可以访问 big 使用的未导出的 big.nat 并调用 nat.string

还有什么我可以做的吗?

附言我也有兴趣使用 nat.trailingZeroBits - 我必须自己编写,因为我没有意识到这已经完成了。

最佳答案

您根本无法访问未导出的函数。您至少需要重写 nat.go 的某些部分才能实现该功能。其中一些功能看起来非常有用,因此可能值得 sending a feature request to the golang-nuts group要求在未来的版本中导出其中的一些内容。

但是您可以使用 strconv.FormatInt()做你需要的。

给定一个 big.Int b 你可以这样做:

strconv.FormatInt(b.Int64(), 32)

完整示例:

package main

import (
"fmt"
"math/big"
"strconv"
)

func main() {
i := 3286583923486565782 // Some random integer
b := big.NewInt(int64(i))
fmt.Println(strconv.FormatInt(b.Int64(), 32))
}

产生:

2r72al99uq9cm

Playground

关于go - 访问未导出的函数 `nat.string`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com