如何在golang中将*big.Int转换为字节数组

9

我正在尝试对一个大整数进行计算,然后将结果转换为字节数组,但我无法弄清楚如何实现。目前我的进展如下。有人有什么想法吗?

sum := big.NewInt(0)

for _, num := range balances {
    sum = sum.Add(sum, num)
}

fmt.Println("total: ", sum)

phrase := []byte(sum)
phraseLen := len(phrase)
padNumber := 65 - phraseLen

3
Int.Bytes()方法是什么?它返回一个大整数的二进制表示形式的字节数组。 - icza
我现在正在使用phrase := sum.Bytes(),它似乎将数字转换为字节,但是我在反向过程中遇到了问题,无法获取原始数字。返回的原始数字类型并不重要,您有什么想法可以检索它吗? - Kravitz
3
Int.SetBytes()方法,你真的应该开始阅读文档了。 - icza
1
尝试阅读它们,这就是我来这里的原因。但仍然没有成功,不过还是谢谢。 - Kravitz
1
@Kravitz:那请展示一下你使用了正确的方法,就像文档中所示。BytesSetBytes可以实现你所描述的功能。 - JimB
用 sum.String() 解决了。 - Kravitz
1个回答

12

试试使用Int.Bytes()方法获取字节数组表示形式,以及Int.SetBytes([]byte)方法从字节数组设置值。例如:

x := new(big.Int).SetInt64(123456)
fmt.Printf("OK: x=%s (bytes=%#v)\n", x, x.Bytes())
// OK: x=123456 (bytes=[]byte{0x1, 0xe2, 0x40})

y := new(big.Int).SetBytes(x.Bytes())
fmt.Printf("OK: y=%s (bytes=%#v)\n", y, y.Bytes())
// OK: y=123456 (bytes=[]byte{0x1, 0xe2, 0x40})

注意,大数的字节数组值是一种紧凑的机器表示形式,不应与字符串值混淆。可以通过通常的String()方法(或不同基数的Text(int))检索字符串值,并通过SetString(...)方法从字符串值设置:

a := new(big.Int).SetInt64(42)
a.String() // => "42"

b, _ := new(big.Int).SetString("cafebabe", 16)
b.String() // => "3405691582"
b.Text(16) // => "cafebabe"
b.Bytes()  // => []byte{0xca, 0xfe, 0xba, 0xbe}

2
请注意,此字节编码不包括符号,它仅存储/设置绝对值。 - Peter Zeller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接