IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    golang strconv包使用

    mckee发表于 2015-11-17 23:35:18
    love 0

    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
    }



沪ICP备19023445号-2号
友情链接