Golang将字符串转换为特定类型的int(int8,int16,int32,int64)

Amo*_*rni 20 go

我试图在go-lang中将字符串解析为整数.我在文档中找到的问题是它提到的语法如下:

ParseInt(s string, base int, bitSize int)
Run Code Online (Sandbox Code Playgroud)

其中,s是要解析的字符串,base由字符串的前缀暗示:base 16表示"0x",base 8表示"0",其他字符10表示.

bitSize参数是我现在面临的问题.根据ParseInt的文档,它指定结果必须适合的整数类型.位大小0,8,16,32和64对应于int,int8,int16,int32和int64.

但对于所有的值,如0,8,16,32和64.我得到相同的类型返回值.即int64类型.

任何人都可以指出我错过了什么.

代码:https: //play.golang.org/p/F3LbUh_maY

Sal*_*ali 25

根据文件

func ParseInt(s string,base int,bitSize int)(i int64,err error)

无论如何,ParseInt总会返回int64.此外

bitSize参数指定结果必须适合的整数类型

所以基本上你的bitSize参数只告诉你要解析的字符串值在解析后应该适合bitSize.如果不是,将超出范围.

就像这样PlayGround:( strconv.ParseInt("192", 10, 8)因为你看到解析后的值会大于最大值int8).

如果你想将其解析到你需要的任何值,只需使用int8(i)之后(int8,int16,int32).

PS因为你触及了如何转换为特定的intX的主题,我会概述它也可以转换为unsigned int.


Pau*_*kin 16

ParseInt总是返回一个int64,您需要将结果转换为您想要的类型.当您32作为第三个参数传递时,如果解析的值不适合int32,则会得到解析错误,但返回的类型总是如此int64.

例如:

i, err := strconv.ParseInt("9207", 10, 32)
if err != nil {
    panic(err)
}
result := int32(i)
fmt.Printf("Parsed int is %d\n", result)
Run Code Online (Sandbox Code Playgroud)