Golang中字符串如何转换为bigInt

Golang中字符串如何转换为bigInt 我正在尝试使用 big.SetString 方法将字符串转换为 big.Int,但在以下代码中遇到了错误:

package main

import (
	"fmt"
	"math/big"
	"strings"
)

func main() {
	var val = "100su"
	if val[len(val)-2:] == "su" {
		val = strings.TrimSuffix(val, "su")
		fmt.Println(val)


		if _, failed := new(big.Int).SetString(val, 10); failed {
			fmt.Println("error")
			return
		}

		fmt.Println("succeed")
		return
	}

}

以下是输出结果:

100
error

正如预期的那样,提供的字符串只是一个数字,但在尝试转换该数字时却失败了。

如有任何帮助,将不胜感激。

诚挚地,


更多关于Golang中字符串如何转换为bigInt的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复
if _, failed := new(big.Int).SetString(val, 10); failed {

应该是

if _, ok := new(big.Int).SetString(val, 10); !ok {

返回的布尔值在成功时为 true

更多关于Golang中字符串如何转换为bigInt的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


问题在于,在调用 SetString 方法时,您使用了 new(big.Int) 创建了一个新的 big.Int 实例,但没有将其赋值给变量。因此,即使转换成功,您也无法访问转换后的值,并且代码逻辑会错误地报告失败。实际上,SetString 方法在成功时会返回 true,但您没有正确检查返回值或使用转换后的 big.Int 对象。

以下是修正后的代码示例,它正确地将字符串转换为 big.Int 并处理转换结果:

package main

import (
	"fmt"
	"math/big"
	"strings"
)

func main() {
	var val = "100su"
	if val[len(val)-2:] == "su" {
		val = strings.TrimSuffix(val, "su")
		fmt.Println(val)

		// 创建一个 big.Int 变量来存储转换结果
		bigIntVal := new(big.Int)
		// 使用 SetString 方法,并检查转换是否成功
		if success := bigIntVal.SetString(val, 10); !success {
			fmt.Println("error: failed to convert string to big.Int")
			return
		}

		fmt.Printf("succeed: converted value is %v\n", bigIntVal)
		return
	}
}

输出结果:

100
succeed: converted value is 100

在这个修正版本中:

  • 我们首先创建了一个 big.Int 实例 bigIntVal
  • 然后调用 SetString 方法,并将返回值(一个布尔值)存储在 success 变量中。
  • 如果转换成功(successtrue),我们打印成功消息和转换后的值;否则,打印错误消息。

这样,代码能够正确地将字符串 “100” 转换为 big.Int 类型,并输出结果。

回到顶部