import "strconv"bash
// 将字符中解析为整数, ParseInt支持正负号; ParseUint不支持正负号,用于无符号整数
// base 表示进位制(2到36),若是base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,不然是10进制;
// bitSize指定结果必须能无溢出赋值的整数类型,0、八、1六、3二、64 分别表明 int、int八、int1六、int3二、int64;返回的err是*NumErr类型的,若是语法有误,err.Error = ErrSyntax;若是结果超出类型范围err.Error = ErrRange。
func ParseInt(s string, base int, bitSize int)(i int64, err error)
func ParseUint(s string, base int, bitSize int)(i uint64, err error)
// Atoi是ParseInt(s,10,0)的简写,能将字符串转为10进制整数
func Atoi(s string)(i int, err error)
// 示例
fmt.Println(strconv.ParseInt("-12", 10, 0)) // -12 <nil>
fmt.Println(strconv.ParseInt("0xFF", 10, 0)) // 0 strconv.ParseInt: parsing "0xFF": invalid syntax
fmt.Println(strconv.ParseInt("0xFF", 0, 0)) // 255 <nil>
fmt.Println(strconv.ParseInt("FF", 16, 0)) // 255 <nil>
fmt.Println(strconv.ParseUint("-12", 10, 0)) // 0 strconv.ParseUint: parsing "-12": invalid syntax
fmt.Println(strconv.ParseUint("12", 10, 0)) // 12 <nil>
fmt.Println(strconv.Atoi("12")) // 12 <nil>
复制代码
// 将整数转为字符串形式,FormatUint是FormatInt的无符号版本,负责处理无符号整数
// base 表示整数的进制,base 必须在2到36之间,结果中会使用小写字母'a'到'z'表示大于10的数字。
func FormatInt(i int64, base int) string func FormatUint(i uint64, base int) string // Itoa是FormatInt(i, 10) 的简写,能将10进制整数转为字符串 func Itoa(i int) string // 示例 fmt.Println(strconv.FormatInt(12, 2)) // 1100 fmt.Println(strconv.FormatInt(-12, 2)) // 1100 fmt.Println(strconv.FormatUint(12, 10)) // 12 fmt.Println(strconv.Itoa(12)) // 12 复制代码
// 解析一个表示浮点数的字符串并返回其值。
// 若是s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。
// bitSize指定了指望的接收类型,32是float32(返回值能够不改变精确值的赋值给float32),64是float64;
// 返回值err是*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。
func ParseFloat(s string, bitSize int) (f float64, err error) // 示例 v := "4.12345678" if s, err := strconv.ParseFloat(v, 32); err == nil {
fmt.Printf("%T, %v\n", s, s) // float64, 4.123456954956055
}
if s, err := strconv.ParseFloat(v, 64); err == nil {
fmt.Printf("%T, %v\n", s, s) // float64, 4.12345678
}
复制代码
// 将浮点数转为字符串
// bitSize 表示来源类型(32:float3二、64:float64)
// fmt 表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制)、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、'g'(指数很大时用'e'格式,不然'f'格式)、'G'(指数很大时用'E'格式,不然'f'格式)。
// prec 控制精度(排除指数部分):对'f'、'e'、'E',它表示小数点后的数字个数;对'g'、'G',它控制总的数字个数。若是prec 为-1,则表明使用最少数量的、但又必需的数字来表示f。
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
// 示例
s32 := strconv.FormatFloat(v, 'E', -1, 32)
fmt.Printf("%T, %v\n", s32, s32) // string, 4.123457E+00
s64 := strconv.FormatFloat(v, 'E', -1, 64)
fmt.Printf("%T, %v\n", s64, s64) // string, 4.12345678E+00
复制代码
// 返回字符串表示的bool值
// 只接收一、0、t、f、T、F、true、false、True、False、TRUE、FALSE做为参数;不然返回错误。
func ParseBool(str string) (value bool, err error)
// 示例
fmt.Println(strconv.ParseBool("1")) // true
复制代码
// 根据布尔值返回"true"或"false"
func FormatBool(b bool) string // 示例 fmt.Println(strconv.FormatBool(true)) // true 复制代码
// 判断一个字符是不是可打印的,和unicode.IsPrint同样。
// r必须是:字母(广义)、数字、标点、符号、ASCII空格
func IsPrint(r rune) bool 复制代码
// 判断字符串s是否能够不被修改的表示为一个单行的、没有空格和tab以外控制字符的反引号字符串。
func CanBackquote(s string) bool 复制代码
// 返回字符串在go语法下的双引号字面值表示(即双引号标记的字符串如:"xxx")。
// Quote中,控制字符、不可打印字符会进行转义。(如\t,\n,\xFF,\u0100)。
// QuoteToASCII中,,控制字符和不可打印字符、非ASCII字符会进行转义。
// QuoteToGraphic中,非图形字符会被转义。
// ps:转义(即:被替换为转义字符)。
func Quote(s string) string
func QuoteToASCII(s string) string
func QuoteToGraphic(s string) string
// 示例
fmt.Println(strconv.Quote(`;khfvs'\"bchsbd\t`)) // ";khfvs'\\\"bchsbd\\t"
fmt.Println(strconv.QuoteToASCII(`"Fran & Freddie's Diner ☺ \t"`)) // "\"Fran & Freddie's Diner\t\u263a \\t\""
fmt.Println(strconv.QuoteToGraphic(`"Fran & Freddie's Diner ☺ \t"`)) // "\"Fran & Freddie's Diner\t☺ \\t\""
复制代码
// 返回字符r在go语法下的单引号字面值表示(即双引号标记的字符如:'x')。
// QuoteRune中,控制字符、不可打印字符会进行转义。(如\t,\n,\xFF,\u0100)
// QuoteRuneToASCII中,控制字符、不可打印字符、非ASCII字符会进行转义
// QuoteRuneToGraphic中,非图形字符会被转义
func QuoteRune(r rune) string
func QuoteRuneToASCII(r rune) string
func QuoteRuneToGraphic(r rune) string
// 示例
fmt.Println(strconv.QuoteRune('☺'))// '☺'
fmt.Println(strconv.QuoteRuneToASCII('☺')) // '\u263a'
fmt.Println(strconv.QuoteRuneToGraphic('☺')) // '☺'
复制代码
// 将带有单引号、双引号、反引号的字符串转为常规字符串
// 函数假设s是一个单引号、双引号、反引号包围的go语法字符串,解析它并返回它表示的值。(若是是单引号括起来的,函数会认为s是go字符字面值,返回一个单字符的字符串)
func Unquote(s string) (t string, err error)
// 将带引号字符串(不包含首尾的引号)中的第一个字符“取消转义”并解码
// 1) value,表示一个rune值或者一个byte值
// 2) multibyte,表示value是不是一个多字节的utf-8字符
// 3) tail,表示字符串剩余的部分
// 4) err,表示可能存在的语法错误
// 参数 quote 定义“引号符”语法规范
// 若是设置为单引号,则认为单引号是语法字符, s 中容许出现 \'、" 字符,不容许出现单独的 ' 字符
// 若是设置为双引号,则认为双引号是语法字符, s 中容许出现 \"、' 字符,不容许出现单独的 " 字符
// 若是设置为 0,函数把单引号和双引号当成普通字符,则能够出现单独的 ' 或 " 字符,但不容许出现 \' 或 \" 字符,
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
// 示例
fmt.Println(strconv.Unquote("`or backquoted.`")) // or backquoted. <nil>
fmt.Println(strconv.Unquote("\"The string must be either double-quoted\"")) // The string must be either double-quoted <nil>
fmt.Println(strconv.Unquote("'\u2639'")) // ☹ <nil>
value, mb, tail ,err := strconv.UnquoteChar(`\"Test *&^$ Test Func\"`, '"')
fmt.Println(value, mb, tail ,err)// 34 false Test *&^$ Test Func\" <nil>
fmt.Println(string(value), mb, tail ,err)// " false Test *&^$ Test Func\" <nil>
复制代码
// 将其余数据类型转为string后添加到dst尾部,转换规则与前面具体类型转换字符串的方法一致
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 // 将字符串s按Append后面的方法(Quote,QuoteRune)转换后,再将转换的字符添加到dst后面 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 func AppendQuoteRuneToGraphic(dst []byte, r rune) []byte 复制代码
// A NumError records a failed conversion.
type NumError struct {
Func string // the failing function (ParseBool, ParseInt, ParseUint, ParseFloat)
Num string // the input
Err error // the reason the conversion failed (ErrRange, ErrSyntax)
}
复制代码
func (e *NumError) Error() string 复制代码