2017-10-17 15 views
1

文字列(本質的に巨大な数字です)を文字列からGoのBig intに変換する方法はありますか?Go toの文字列to big Int?

Iは、第一バイトアレイその後のBigIntに配列を変換

array := []byte(string)

に変換しようとしました。

私はそれが働いたと思っていましたが、出力は元の入力とは異なりました。だから私は変換が何らかの理由で正しいことをしなかったと推測しています。

私が扱っている数字は300桁を超えているので、私は普通のintを使うことはできません。

これに最も適した方法は何ですか?

答えて

6

Package big

import "math/big"

func (*Int) SetString

func (z *Int) SetString(s string, base int) (*Int, bool)

のSetStringは、所与のベースに解釈Sの値にZ設定し、 戻りzと成功を示すブール値。成功のためには、文字列全体( ではなく接頭辞)が有効である必要があります。 SetStringが失敗した場合、 の値は未定義ですが、返される値はnilです。

base引数は0または2とMaxBaseの間の値でなければなりません。 の基数が0の場合、文字列接頭辞が実際の変換基数を決定します。接頭辞「0x」または「0X」の は基数16を選択します。 「0」の接頭辞は、ベース8、 を選択し、「0B」または「0B」プレフィックスがベース2を選択しそうでなければ選択された塩基 は、例えば10

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    n := new(big.Int) 
    n, ok := n.SetString("314159265358979323846264338327950288419716939937510582097494459", 10) 
    if !ok { 
     fmt.Println("SetString: error") 
     return 
    } 
    fmt.Println(n) 
} 

遊び場です。 https://play.golang.org/p/ZaSOQoqZB_

出力:

314159265358979323846264338327950288419716939937510582097494459 
1

を参照してください。 string to big int変換のための。

package main 


import (
    "fmt" 
    "log" 
    "math/big" 
) 

func main() { 
    i := new(big.Int) 
    _, err := fmt.Sscan("18446744073709551617", i) 
    if err != nil { 
     log.Println("error scanning value:", err) 
    } else { 
     fmt.Println(i) 
    } 
} 

出力:

18446744073709551617