2017-10-17 78 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