golang教程|golang语言strconv包使用例子

更新时间:2020-03-24    来源:C语言    手机版     字体:

【www.bbyears.com--C语言】

golang strconv包提供了字符串和基本数据类型之间的转换操作。
1.默认提供了1个常量IntSize和两个变量ErrRange和ErrSyntax。

package main
 
import (
 "strconv"
 "fmt"
)
 
func main()  {
 //IntSize是int或uint类型的字位数。
 fmt.Println(strconv.IntSize)
 //ErrRange表示超出目标类型表示范围。[var ErrRange = errors.New("value out of range")]
 fmt.Println(strconv.ErrRange)
 //ErrSyntax表示不符合目标类型语法。[var ErrSyntax = errors.New("invalid syntax")]
 fmt.Println(strconv.ErrSyntax)
}

2.字符串和整型相互转换

实现函数原型:

//字符串转换为整数
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
func Atoi(s string) (i int, err error)
 
//整数转换为字符串
func FormatUint(i uint64, base int) string  // 无符号整型转字符串
func FormatInt(i int64, base int) string    // 有符号整型转字符串
func Itoa(i int) string

示例如下:

package main
 
import (
 "strconv"
 "fmt"
)
 
func main()  {
 //字符串转整型
 v32 := "-354634382"
 if s, err := strconv.ParseInt(v32, 10, 32); err == nil {
  fmt.Println(s) //-354634382
 }
 if s, err := strconv.Atoi(v32); err == nil {
  fmt.Println(s) //-354634382
 }
 
 //整型转字符串
 v := int64(-42)
 fmt.Println(strconv.FormatInt(v, 10)) // "-42"
 i := 10
 fmt.Println(strconv.Itoa(i)) // "10"
}

参数说明:

参数 base 代表字符串按照给定的进制进行解释。一般的,base 的取值为 2~36,如果 base 的值为 0,则会根据字符串的前缀来确定 base 的值:"0x" 表示 16 进制; "0" 表示 8 进制;否则就是 10 进制。
参数 bitSize 表示的是整数取值范围,或者说整数的具体类型。取值 0、8、16、32 和 64 分别代表 int、int8、int16、int32 和 int64。

3.字符串和布尔值相互转换

实现函数原型:
// ParseBool 将字符串转换为布尔值
// 它接受真值:1, t, T, TRUE, true, True
// 它接受假值:0, f, F, FALSE, false, False.
// 其它任何值都返回一个错误
func ParseBool(str string) (value bool, err error)
 
// FormatBool 将布尔值转换为字符串 "true" 或 "false"
func FormatBool(b bool) string
 
// AppendBool 将布尔值 b 转换为字符串 "true" 或 "false"
// 然后将结果追加到 dst 的尾部,返回追加后的 []byte
func AppendBool(dst []byte, b bool) []byte

示例如下:

package main
 
import (
 "strconv"
 "fmt"
)
 
func main()  {
 if b, err := strconv.ParseBool("T"); err == nil {
  fmt.Println(b) //true
 }
 
 fmt.Println(strconv.FormatBool(0 > 1)) // "false"
 
 rst := make([]byte, 0)
 rst = strconv.AppendBool(rst, 0 < 1)
 fmt.Printf("%s\n", rst) // "true"
}

4.字符串和浮点数相互转换

实现函数原型:

// ParseFloat 将字符串转换为浮点数
// s:要转换的字符串
// bitSize:指定浮点类型(32:float32、64:float64)
// 如果 s 是合法的格式,而且接近一个浮点值,
// 则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
// 如果 s 不是合法的格式,则返回“语法错误”
// 如果转换结果超出 bitSize 范围,则返回“超出范围”
func ParseFloat(s string, bitSize int) (f float64, err error)
 
// FormatFloat 将浮点数 f 转换为字符串值
// f:要转换的浮点数
// fmt:格式标记(b、e、E、f、g、G)
// prec:精度(数字部分的长度,不包括指数部分)
// bitSize:指定浮点类型(32:float32、64:float64)
//
// 格式标记:
// "b" (-ddddp±ddd,二进制指数)
// "e" (-d.dddde±dd,十进制指数)
// "E" (-d.ddddE±dd,十进制指数)
// "f" (-ddd.dddd,没有指数)
// "g" ("e":大指数,"f":其它情况)
// "G" ("E":大指数,"f":其它情况)
//
// 如果格式标记为 "e","E"和"f",则 prec 表示小数点后的数字位数
// 如果格式标记为 "g","G",则 prec 表示总的数字位数(整数部分+小数部分)
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
 
// AppendFloat 将浮点数 f 转换为字符串值,并将转换结果追加到 dst 的尾部
// 返回追加后的 []byte
func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte

示例如下:

package main
 
import (
 "strconv"
 "fmt"
)
 
func main()  {
 s := "0.1234567891122334455"
 if f, err := strconv.ParseFloat(s, 32); err == nil {
  fmt.Println(f) //12345679104328156
 }
 if f, err := strconv.ParseFloat(s, 64); err == nil {
  fmt.Println(f) //0.12345678911223344
 }
 
 f := 0.12345678911223344
 fmt.Println(strconv.FormatFloat(f, "E", 5, 32)) //1.23457E-01
 
 b32 := []byte("float32:")
 b32 = strconv.AppendFloat(b32, 3.1415926535, "E", -1, 32)
 fmt.Println(string(b32)) //float32:3.1415927E+00
}

本文来源:http://www.bbyears.com/asp/89413.html