Go语言strconv包


Go语言strconv包 存放位置 \Go\src\strconv
strconv简介
strconv提供了字符串与基本类型的转换函数接口
Constants
Variables
type NumError
func (e *NumError) Error() string
func IsPrint(r rune) bool
func CanBackquote(s string) bool
func Quote(s string) string
func QuoteToASCII(s string) string
func QuoteRune(r rune) string
func QuoteRuneToASCII(r rune) string
func Unquote(s string) (t string, err error)
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
func ParseBool(str string) (value bool, err error)
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 ParseFloat(s string, bitSize int) (f float64, err error)
func FormatBool(b bool) string
func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
func Atoi(s string) (i int, err error)
func Itoa(i int) string
func AppendBool(dst []byte, b bool) []byte
func AppendInt(dst []byte, i int64, base int) []byte
func AppendUint(dst []byte, i uint64, base int) []byte
func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte
func AppendQuote(dst []byte, s string) []byte
func AppendQuoteToASCII(dst []byte, s string) []byte
func AppendQuoteRune(dst []byte, r rune) []byte
func AppendQuoteRuneToASCII(dst []byte, r rune) []byte

字符串与bool类型转换

func ParseBool(str string) (value bool, err error)
ParseBool将字符串转换为布尔值接受真值 1, t, T, TRUE, true, True
接受假值 0, f, F, FALSE, false, False
其它任何值都返回一个错误
package main
import (
   "fmt"
   "strconv"
)
func main() {
   fmt.Println(strconv.ParseBool("1"))    // true
   fmt.Println(strconv.ParseBool("t"))    // true
   fmt.Println(strconv.ParseBool("T"))    // true
   fmt.Println(strconv.ParseBool("true")) // true
   fmt.Println(strconv.ParseBool("True")) // true
   fmt.Println(strconv.ParseBool("TRUE")) // true
   fmt.Println(strconv.ParseBool("TRue")) // false strconv.ParseBool: parsing "TRue": invalid syntax
   fmt.Println(strconv.ParseBool("0"))     // false
   fmt.Println(strconv.ParseBool("f"))     // false
   fmt.Println(strconv.ParseBool("F"))     // false
   fmt.Println(strconv.ParseBool("false")) // false
   fmt.Println(strconv.ParseBool("False")) // false
   fmt.Println(strconv.ParseBool("FALSE")) // false
   fmt.Println(strconv.ParseBool("FALse")) // false strconv.ParseBool: parsing "FAlse": invalid syntax
}

func FormatBool(b bool) string
FormatBool将布尔值转换为字符串"true"或"false"
package main
import (
   "fmt"
   "strconv"
)
func main() {
   fmt.Println(strconv.FormatBool(0 < 1)) // true
   fmt.Println(strconv.FormatBool(0 > 1)) // false
}
func AppendBool(dst []byte, b bool) []byte
AppendBool将布尔值b转换为字符串"true"或"false" 后将结果追加到dst的尾部 返回追加后的[]byte
package main
import (
   "fmt"
   "strconv"
)
func main() {
   rst := make([]byte, 0)
   rst = strconv.AppendBool(rst, 0 < 1)
   fmt.Printf("%s\n", rst) // true
   rst = strconv.AppendBool(rst, 0 > 1)
   fmt.Printf("%s\n", rst) // truefalse
}

字符串与整型转换

func ParseInt(s string, base int, bitSize int) (i int64, err error)
ParseInt将字符串转换为int类型
s 要转换的字符串
base 进位制(2进制到36进制)
bitSize 指定整数类型(0:int、8:int8、16:int16、32:int32、64:int64)
返回转换后的结果和转换时遇到的错误,如果base为0,则根据字符串的前缀判断进位制(0x:16,0:8,其它:10)
package main
import (
   "fmt"
   "strconv"
)
func main() {
   fmt.Println(strconv.ParseInt("123", 10, 8))   // 123
   fmt.Println(strconv.ParseInt("12345", 10, 8)) // 127 strconv.ParseInt: parsing "12345": value out of range
   fmt.Println(strconv.ParseInt("2147483647", 10, 0)) // 2147483647
   fmt.Println(strconv.ParseInt("0xFF", 16, 0))  // 0 strconv.ParseInt: parsing "0xFF": invalid syntax
   fmt.Println(strconv.ParseInt("FF", 16, 0)) // 255
   fmt.Println(strconv.ParseInt("0xFF", 0, 0))// 255
}
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
ParseUint将字符串转换为uint类型
package main
import (
   "fmt"
   "strconv"
)
func main() {
   fmt.Println(strconv.ParseUint("FF", 16, 8)) // 255
}
func Atoi(s string) (i int, err error)
Atoi相当于ParseInt(s, 10, 0)

func FormatInt(i int64, base int) string
FormatUint将int型整数i转换为字符串形式
base 进位制(2进制到36进制) 大于10进制的数 返回值使用小写字母'a'到'z'
package main
import (
   "fmt"
   "strconv"
)
func main() {
   i := int64(-2048)
   fmt.Println(strconv.FormatInt(i, 2))  // -100000000000
   fmt.Println(strconv.FormatInt(i, 8))  // -4000
   fmt.Println(strconv.FormatInt(i, 10)) // -2048
   fmt.Println(strconv.FormatInt(i, 16)) // -800
   fmt.Println(strconv.FormatInt(i, 36)) // -1kw
}
func Itoa(i int) string
Itoa相当于FormatInt(i, 10)
func AppendInt(dst []byte, i int64, base int) []byte
AppendInt将int型整数i转换为字符串形式,并追加到dst的尾部
i:要转换的字符串,base:进位制,返回追加后的[]byte

func AppendUint(dst []byte, i uint64, base int) []byte
AppendUint将uint型整数i转换为字符串形式,并追加到dst的尾部
i:要转换的字符串,base:进位制,返回追加后的[]byte

字符串与浮点型转换

func ParseFloat(s string, bitSize int) (f float64, err error)
ParseFloat将字符串转换为浮点数
s 要转换的字符串
bitSize:指定浮点类型(32:float32、64:float64)
如果s是合法的格式,而且接近一个浮点值,则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准);如果s不是合法的格式,则返回“语法错误”;如果转换结果超出bitSize范围,则返回“超出范围”
package main
import (
   "fmt"
   "strconv"
)
func main() {
   s := "0.12345678901234567890"
   f, err := strconv.ParseFloat(s, 32)
   fmt.Println(f, err)          // 0.12345679104328156
   fmt.Println(float32(f), err) // 0.12345679
   f, err = strconv.ParseFloat(s, 64)
   fmt.Println(f, err) // 0.12345678901234568
}
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
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表示总的数字位数(整数部分+小数部分)
package main
import (
   "fmt"
   "strconv"
)
func main() {
   f := 100.12345678901234567890123456789
   fmt.Println(strconv.FormatFloat(f, 'b', 5, 32))// 13123382p-17
   fmt.Println(strconv.FormatFloat(f, 'e', 5, 32))// 1.00123e+02
   fmt.Println(strconv.FormatFloat(f, 'E', 5, 32))// 1.00123E+02
   fmt.Println(strconv.FormatFloat(f, 'f', 5, 32))// 100.12346
   fmt.Println(strconv.FormatFloat(f, 'g', 5, 32))// 100.12
   fmt.Println(strconv.FormatFloat(f, 'G', 5, 32))// 100.12
   fmt.Println(strconv.FormatFloat(f, 'b', 30, 32))// 13123382p-17
   fmt.Println(strconv.FormatFloat(f, 'e', 30, 32))// 1.001234588623046875000000000000e+02
   fmt.Println(strconv.FormatFloat(f, 'E', 30, 32))// 1.001234588623046875000000000000E+02
   fmt.Println(strconv.FormatFloat(f, 'f', 30, 32))// 100.123458862304687500000000000000
   fmt.Println(strconv.FormatFloat(f, 'g', 30, 32))// 100.1234588623046875
   fmt.Println(strconv.FormatFloat(f, 'G', 30, 32))// 100.1234588623046875
}
func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte
AppendFloat将浮点数f转换为字符串值,并将转换结果追加到dst的尾部,返回追加后的[]byte
package main
import (
   "fmt"
   "strconv"
)
func main() {
   f := 100.12345678901234567890123456789
   b := make([]byte, 0)
   b = strconv.AppendFloat(b, f, 'f', 5, 32)
   b = append(b, " "...)
   b = strconv.AppendFloat(b, f, 'e', 5, 32)
   fmt.Printf("%s", b) // 100.12346 1.00123e+0
}

特殊字符处理函数

func Quote(s string) string
Quote将字符串s转换为“双引号”引起来的字符串
其中的特殊字符将被转换为“转义字符”,“不可显示的字符”将被转换为“转义字符”
package main
import (
   "fmt"
   "strconv"
)
func main() {
   fmt.Println(strconv.Quote(`/home/user`)) // "/home/user"
}
func AppendQuote(dst []byte, s string) []byte
AppendQuote将字符串s转换为“双引号”引起来的字符串,并将结果追加到dst的尾部,返回追加后的[]byte其中的特殊字符将被转换为“转义字符”

func QuoteToASCII(s string) string
QuoteToASCII将字符串s转换为“双引号”引起来的ASCII字符串 “非ASCII字符”和“特殊字符”将被转换为“转义字符”

func AppendQuoteToASCII(dst []byte, s string) []byte
AppendQuoteToASCII将字符串s转换为“双引号”引起来的 ASCII 字符串,并将结果追加到dst的尾部,返回追加后的[]byte,“非 ASCII 字符”和“特殊字符”将被转换为“转义字符”

func QuoteRune(r rune) string
QuoteRune将Unicode字符转换为“单引号”引起来的字符串 “特殊字符”将被转换为“转义字符”

func AppendQuoteRune(dst []byte, r rune) []byte
AppendQuoteRune将Unicode字符转换为“单引号”引起来的字符串,并将结果追加到dst的尾部,返回追加后的[]byte“特殊字符”将被转换为“转义字符”

func QuoteRuneToASCII(r rune) string
QuoteRuneToASCII将Unicode字符转换为“单引号”引起来的ASCII字符串,“非 ASCII字符”和“特殊字符”将被转换为“转义字符”

func AppendQuoteRuneToASCII(dst []byte, r rune) []byte
AppendQuoteRune将Unicode字符转换为“单引号”引起来的ASCII字符串,并将结果追加到dst的尾部,返回追加后的[]byte,“非 ASCII 字符”和“特殊字符”将被转换为“转义字符”

func CanBackquote(s string) bool
CanBackquote判断字符串s是否可以表示为一个单行的“反引号”字符串,字符串中不能含有控制字符(除了\t)和“反引号”字符,否则返回false

func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
UnquoteChar 将 s 中的第一个字符“取消转义”并解码
s 转义后的字符串
quote 字符串使用的“引号符”(用于对引号符“取消转义”)
value  解码后的字符
multibyte:value是否为多字节字符
tail 字符串s除去value后的剩余部分
error 返回s中是否存在语法错误
参数 quote 为“引号符”
如果设置为单引号,则 s 中允许出现 \' 字符,不允许出现单独的 ' 字符
如果设置为双引号,则 s 中允许出现 \" 字符,不允许出现单独的 " 字符
如果设置为 0,则不允许出现 \' 或 \" 字符,可以出现单独的 ' 或 " 字符

func Unquote(s string) (t string, err error)
Unquote 将“带引号的字符串” s 转换为常规的字符串(不带引号和转义字符)
s可以是“单引号”、“双引号”或“反引号”引起来的字符串(包括引号本身)
如果s是单引号引起来的字符串,则返回该该字符串代表的字符

func IsPrint(r rune) bool
IsPrint判断Unicode字符r是否是一个可显示的字符,空格可以显示,而\t则不能显示

Go 字符串转换和type-conversion相关