103

我想将字符串转换为 int64。我从strconv包中找到的是Atoi功能。它似乎将一个字符串转换为一个 int 并返回它:

// Atoi is shorthand for ParseInt(s, 10, 0).
func Atoi(s string) (i int, err error) {
        i64, err := ParseInt(s, 10, 0)
    return int(i64), err
}

ParseInt 实际上返回一个 int64:

func ParseInt(s string, base int, bitSize int) (i int64, err error){
     //...
}

因此,如果我想从字符串中获取 int64,我应该避免使用 Atoi,而是使用 ParseInt?或者有没有隐藏在某个地方的 Atio64?

4

3 回答 3

204

将字符串解析为 int64 示例:

// Use the max value for signed 64 integer. http://golang.org/pkg/builtin/#int64
var s string = "9223372036854775807"
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
    panic(err)
}
fmt.Printf("Hello, %v with type %s!\n", i, reflect.TypeOf(i))

输出:

您好,9223372036854775807,类型为 int64!

https://play.golang.org/p/XOKkE6WWer

于 2015-02-01T19:56:19.143 回答
82

不,没有 Atoi64。您还应该将 64 作为最后一个参数传递给 ParseInt,否则它可能不会在 32 位系统上产生预期值。

添加缩写示例:

var s string = "9223372036854775807"
i, _ := strconv.ParseInt(s, 10, 64)
fmt.Printf("val: %v ; type: %[1]T\n", i)

https://play.golang.org/p/FUC8QO0-lYn

于 2014-02-03T16:11:58.387 回答
2

另外的选择:

package main
import "fmt"

func main() {
   var n int64
   fmt.Sscan("100", &n)
   fmt.Println(n == 100)
}

https://golang.org/pkg/fmt#Sscan

于 2021-03-26T19:09:34.130 回答