Как я могу преобразовать * big.Int в байтовый массив в Голанге - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь выполнить вычисления для большого целого числа, а затем преобразовать результат в байтовый массив, но я не могу понять, как это сделать, именно там сейчас находится Im.у кого-нибудь есть идеи

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

1 Ответ

0 голосов
/ 25 мая 2018

Попробуйте использовать 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}
...