在这篇博文中,我们将通过实例来学习围棋语言中的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