bugfix> arrays > 投稿

私は大きな整数で計算を行ってから結果をバイト配列に変換しようとしていますが、これを行う方法がわかりません。誰もがアイデアを得た

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 件
  • 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}
    
    

あなたの答え