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

Kra*_*itz 0 arrays go go-ethereum geth

我试图在一个大的int数上进行计算,然后将结果转换为字节数组,但是我不知道该怎么做,这是我到目前为止所处的位置。任何人有任何想法

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
Run Code Online (Sandbox Code Playgroud)

mae*_*ics 5

尝试使用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})
Run Code Online (Sandbox Code Playgroud)

请注意,大数字的字节数组值是紧凑的机器表示形式,不应将其误认为是字符串值,该字符串值可以通过常规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}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此字节编码不包括符号,它仅存储/设置绝对值。 (2认同)