Go中的大型Int的字符串?

时间:2017-10-17 05:55:29

标签: go type-conversion

有没有办法在Go中将字符串(实质上是一个庞大的数字)从字符串转换为Big int?

我试图先把它转换成字节数组

array := []byte(string)

然后将数组转换为BigInt。

我认为这很有效,但输出与原始输入不同。所以我猜测转换由于某种原因没有做正确的事情。

我正在处理的数字长度超过300位,所以我认为我不能使用常规的数据。

有什么最佳方法的建议吗?

2 个答案:

答案 0 :(得分:13)

  

Package big

     

import "math/big"

     

func (*Int) SetString

     

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

     

SetString将z设置为s的值,在给定的基数中解释,和   返回z和表示成功的布尔值。整个字符串(不是   只是一个前缀)必须对成功有效。如果SetString失败,那么   z的值未定义,但返回值为nil。

     

base参数必须为0或介于2和MaxBase之间的值。如果   base为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 :(得分: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