2017-10-17 75 views
1

有沒有辦法將字符串(實質上是一個巨大的數字)從字符串轉換爲Go中的Big int?字符串到大詮釋在Go?

我試圖首先將它轉換成字節陣列

array := []byte(string)

然後陣列轉換成BigInt有。

我認爲工作,但是,輸出是不同於原來的輸入。所以我猜測這個轉換由於某種原因沒有做正確的事情。

我正在處理的數字超過300位數字,所以我不認爲我可以使用常規int。

什麼是最好的方法對此有什麼建議?

回答

6

Package big

import "math/big"

func (*Int) SetString

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

的SetString設置z爲s的值,在給定的基解釋,並且 返回z和一個布爾值,指示成功。整個字符串(不是 只是一個前綴)必須對成功有效。如果SetString失敗,則z的 值未定義,但返回值爲零。

基本參數必須是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

Example用於字符串大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