有没有办法在Go中将字符串(实质上是一个庞大的数字)从字符串转换为Big int?
我试图先把它转换成字节数组
array := []byte(string)
然后将数组转换为BigInt。
我认为这很有效,但输出与原始输入不同。所以我猜测转换由于某种原因没有做正确的事情。
我正在处理的数字长度超过300位,所以我认为我不能使用常规的数据。
有什么最佳方法的建议吗?
答案 0 :(得分:13)
import "math/big"
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