Golang- strconv ParseInt函数介绍及实例

1,734 阅读3分钟

在这篇博文中,我们将通过实例来学习围棋语言中的strconv ParseInt函数。

strconv包提供了将字符串转换为不同数据类型的函数。

PaseInt() 是用于将字符串转换为整数类型和用于数字转换的函数之一。你可以从这里获得官方文档

语法
下面是一个ParseInt的例子的签名

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

参数列表 -

参数:

描述

字符串:

基数是一个从2到36的值

int:

bitSize 减少了输出转换的int值

返回的数据 -

返回int64值

错误返回

函数使用示例

parseInt()函数接受并解析字符串类型,并根据基数值进行转换,返回一个int类型的值。
如果基数或弧度参数为零,Go编译器会假定以下事项

  • 如果字符串以 "0x "开头,基数假定为16,即十六进制。
  • 如果字符串以 "0 "开头,则基数假定为8,即八进制数字。
  • 如果一个字符串以任何其他值开始,则基数假定为10,即十进制数。

如果字符串前后包含任何空格,则为无效,并产生运行时错误 -strconv.ParseInt: parsing " 243 ": invalid syntax

如果给定的bitSize小于转换后的int值的大小,就会产生运行时错误 -strconv.ParseInt: 解析 "5612": 值超出范围 int64

ParseInt示例

下面的例子解释了字符串到Int64的转换

  • 使用parseInt将字符串转换为Int64
  • 使用parseInt将字符串十六进制转换为Int64
  • 字符串八进制到Int64的转换
package main  
  
import (  
 "fmt"  
 "reflect"  
 "strconv"  
)  
  
func main() {  
 // bitSize argument example usage  
 fmt.Println(" ======================= bitSize argument example ======================= ")  
 v1, err := strconv.ParseInt("5612", 0, 2)  
 fmt.Println(v1, err, reflect.TypeOf(v1))  
 v2, err := strconv.ParseInt("5612", 0, 8)  
 fmt.Println(v2, err, reflect.TypeOf(v2))  
 v3, err := strconv.ParseInt("5612", 0, 16)  
 fmt.Println(v3, err, reflect.TypeOf(v3))  
 // base argument example usage  
 fmt.Println(" ======================= base argument example ======================= ")  
 v4, err := strconv.ParseInt("5612", 0, 16)  
 fmt.Println(v4, err, reflect.TypeOf(v4))  
 v5, err := strconv.ParseInt("5612", 8, 32)  
 fmt.Println(v5, err, reflect.TypeOf(v5))  
 v6, err := strconv.ParseInt("5612", 16, 64)  
 fmt.Println(v6, err, reflect.TypeOf(v6))  
 // String Argument argument example usage  
 fmt.Println(" ======================= String argument example ======================= ")  
 v7, err := strconv.ParseInt("0x123", 0, 64) // hexdecimal Numeric Conversion  
 fmt.Println(v7, err, reflect.TypeOf(v7))  
 v8, err := strconv.ParseInt("0123", 0, 64) // Octal Number Conversion  
 fmt.Println(v8, err, reflect.TypeOf(v8))  
 v9, err := strconv.ParseInt("123", 0, 64) // any other number  
 fmt.Println(v9, err, reflect.TypeOf(v9))  
 // Invalid String argument conversion example usage  
 fmt.Println(" ======================= Invalid String argument conversion example usage ======================= ")  
 v10, err := strconv.ParseInt("abc", 0, 64) // any other number  
 fmt.Println(v9, err, reflect.TypeOf(v10))  
}  

当你编译并执行该程序时,它的输出如下

 ======================= bitSize argument example =======================  
1 strconv.ParseInt: parsing "5612": value out of range int64  
127 strconv.ParseInt: parsing "5612": value out of range int64  
5612  int64  
 ======================= base argument example =======================  
5612  int64  
2954  int64  
22034  int64  
 ======================= String argument example =======================  
291  int64  
83  int64  
123  int64  
 ======================= Invalid String argument conversion example usage =======================  
123 strconv.ParseInt: parsing "abc": invalid syntax int64

将字符串转换为整数类型 - Int8,Int16,Int 32

parseInt总是返回Int64值。使用Int8(int64值)代码,返回的Int64值被转换为Int8类型。同样,Int16(),Int32()也是用来转换为Int16,Int32类型。

下面是一个转换为其他类型的示例程序

package main  
  
import (  
 "fmt"  
 "reflect"  
 "strconv"  
)  
  
func main() {  
 v1, err := strconv.ParseInt("1", 0, 16)  
 fmt.Println(v1, err, reflect.TypeOf(v1))  
 var v2 int8  
 var v3 int16  
 var v4 int32  
 v2 = int8(v1) // Convert to int8  
 fmt.Println(v2, err, reflect.TypeOf(v2))  
 v3 = int16(v1) // Convert to int16  
 fmt.Println(v3, err, reflect.TypeOf(v3))  
 v4 = int32(v1) // Convert to int32  
 fmt.Println(v4, err, reflect.TypeOf(v4))  
}  

输出是

1  int64  
1  int8  
1  int16  
1  int32