【问题标题】:string to big Int in Go?字符串到 Go 中的大 Int?
【发布时间】:2018-03-28 17:51:43
【问题描述】:

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

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

array := []byte(string)

然后将数组转换为 BigInt。

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

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

关于什么是最好的方法的任何建议?

【问题讨论】:

    标签: go type-conversion


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      请参阅Example 了解字符串到大整数的转换。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-21
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多