如何保留 big.Int.Bytes() len?

How can I preserve big.Int.Bytes() len?

鉴于:

arr := make([]byte, 8)

fmt.Println(arr) // [0 0 0 0 0 0 0 0]

big := new(big.Int).SetBytes(arr).Bytes()

fmt.Println(big) // []

我试着把数字 1 放进去,得到了这样的结果:

... // [0 0 0 0 0 0 0 1] from []byte

...// [1] from big.Int

我必须保留 8 的长度,但 big.Int 不允许。怎么还能保存下来呢?

Int 类型在内部不保留构造它的字节,Bytes returns 表示值所需的最小字节数。

为了将其变成固定长度的字节片,使用FillBytes方法。您需要确保该值适合提供的字节片,否则会出现 panic。

示例:

package main

import (
    "fmt"
    "math/big"
)

func main() {
    xarr := []byte{1, 2, 3}
    fmt.Println(xarr)

    x := new(big.Int).SetBytes(xarr)
    fmt.Println(x)

    y := big.NewInt(0)
    y.Add(x, big.NewInt(2560))
    fmt.Println(y)

    yarr := make([]byte, 8)
    y.FillBytes(yarr)
    fmt.Println(yarr)
}

输出:

[1 2 3]
66051
68611
[0 0 0 0 0 1 12 3]