Golang学习 - strconv 包
本文内容纲要:
------------------------------------------------------------
//将布尔值转换为字符串true或false
funcFormatBool(bbool)string
//将字符串转换为布尔值
//它接受真值:1,t,T,TRUE,true,True
//它接受假值:0,f,F,FALSE,false,False
//其它任何值都返回一个错误。
funcParseBool(strstring)(bool,error)
------------------------------
//ErrRange表示值超出范围
varErrRange=errors.New("valueoutofrange")
//ErrSyntax表示语法不正确
varErrSyntax=errors.New("invalidsyntax")
//将整数转换为字符串形式。base表示转换进制,取值在2到36之间。
//结果中大于10的数字用小写字母a-z表示。
funcFormatInt(iint64,baseint)string
funcFormatUint(iuint64,baseint)string
//将字符串解析为整数,ParseInt支持正负号,ParseUint不支持正负号。
//base表示进位制(2到36),如果base为0,则根据字符串前缀判断,
//前缀0x表示16进制,前缀0表示8进制,否则是10进制。
//bitSize表示结果的位宽(包括符号位),0表示最大位宽。
funcParseInt(sstring,baseint,bitSizeint)(iint64,errerror)
funcParseUint(sstring,baseint,bitSizeint)(uint64,error)
//将整数转换为十进制字符串形式(即:FormatInt(i,10)的简写)
funcItoa(iint)string
//将字符串转换为十进制整数,即:ParseInt(s,10,0)的简写)
funcAtoi(sstring)(int,error)
------------------------------
//示例
funcmain(){
fmt.Println(strconv.ParseInt("FF",16,0))
//255
fmt.Println(strconv.ParseInt("0xFF",16,0))
//0strconv.ParseInt:parsing"0xFF":invalidsyntax
fmt.Println(strconv.ParseInt("0xFF",0,0))
//255
fmt.Println(strconv.ParseInt("9",10,4))
//7strconv.ParseInt:parsing"9":valueoutofrange
}
------------------------------
//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表示总的数字位数(整数部分+小数部分)
//参考格式化输入输出中的旗标和精度说明
funcFormatFloat(ffloat64,fmtbyte,prec,bitSizeint)string
//将字符串解析为浮点数,使用IEEE754规范进行舍入。
//bigSize取值有32和64两种,表示转换结果的精度。
//如果有语法错误,则err.Error=ErrSyntax
//如果结果超出范围,则返回±Inf,err.Error=ErrRange
funcParseFloat(sstring,bitSizeint)(float64,error)
------------------------------
//示例
funcmain(){
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
}
------------------------------
//判断字符串是否可以不被修改的表示为一个单行的反引号字符串。
//字符串中不能含有控制字符(除了\t)和“反引号”字符,否则返回false
funcCanBackquote(sstring)bool
//示例:找出所有!CanBackquote的字符
funcmain(){
fori:=rune(0);i<utf8.MaxRune;i++{
if!strconv.CanBackquote(string(i)){
fmt.Printf("%q,",i)
}
}
}
//结果如下:
//'\x00','\x01','\x02','\x03','\x04','\x05','\x06','\a','\b','\n','\v','\f','\r','\x0e','\x0f','\x10','\x11','\x12','\x13','\x14','\x15','\x16','\x17','\x18','\x19','\x1a','\x1b','\x1c','\x1d','\x1e','\x1f','`','\u007f','\ufeff'
------------------------------
//判断r是否为可打印字符
//可否打印并不是你想象的那样,比如空格可以打印,而\t则不能打印
funcIsPrint(rrune)bool
//判断r是否为Unicode定义的图形字符。
funcIsGraphic(rrune)bool
------------------------------
//示例:获取不可打印字符和非图形字符
funcmain(){
varrnp,rng,rpng,rgnp[]rune
constmaxLen=32
fori:=rune(0);i<utf8.MaxRune;i++{
if!strconv.IsPrint(i){//不可打印
iflen(rnp)<maxLen{
rnp=append(rnp,i)
}
ifstrconv.IsGraphic(i)&&len(rgnp)<maxLen{//图形字符
rgnp=append(rgnp,i)
}
}
if!strconv.IsGraphic(i){//非图形字符
iflen(rng)<maxLen{
rng=append(rng,i)
}
ifstrconv.IsPrint(i)&&len(rpng)<maxLen{//可打印
rpng=append(rpng,i)
}
}
}
fmt.Printf("不可打印字符:%q\n",rnp)
fmt.Printf("非图形字符:%q\n",rng)
fmt.Printf("不可打印图形字符:%q\n",rgnp)
fmt.Printf("可打印非图形字符:%q\n",rpng)
}
//不可打印字符:['\x00''\x01''\x02''\x03''\x04''\x05''\x06''\a''\b''\t''\n''\v''\f''\r''\x0e''\x0f''\x10''\x11''\x12''\x13''\x14''\x15''\x16''\x17''\x18''\x19''\x1a''\x1b''\x1c''\x1d''\x1e''\x1f']
//非图形字符:['\x00''\x01''\x02''\x03''\x04''\x05''\x06''\a''\b''\t''\n''\v''\f''\r''\x0e''\x0f''\x10''\x11''\x12''\x13''\x14''\x15''\x16''\x17''\x18''\x19''\x1a''\x1b''\x1c''\x1d''\x1e''\x1f']
//不可打印图形字符:['\u00a0''\u1680''\u2000''\u2001''\u2002''\u2003''\u2004''\u2005''\u2006''\u2007''\u2008''\u2009''\u200a''\u202f''\u205f''\u3000']
//可打印非图形字符:[]
------------------------------
//将s转换为双引号字符串
funcQuote(sstring)string
//功能同上,非ASCII字符和不可打印字符会被转义
funcQuoteToASCII(sstring)string
//功能同上,非图形字符会被转义
funcQuoteToGraphic(sstring)string
------------------------------
//示例
funcmain(){
s:="Hello\t世界!\n"
fmt.Println(s)//Hello 世界!(换行)
fmt.Println(strconv.Quote(s))//"Hello\t世界!\n"
fmt.Println(strconv.QuoteToASCII(s))//"Hello\t\u4e16\u754c\uff01\n"
fmt.Println(strconv.QuoteToGraphic(s))//"Hello\t世界!\n"
}
------------------------------
//将r转换为单引号字符
funcQuoteRune(rrune)string
//功能同上,非ASCII字符和不可打印字符会被转义
funcQuoteRuneToASCII(rrune)string
//功能同上,非图形字符会被转义
funcQuoteRuneToGraphic(rrune)string
------------------------------
//Unquote将“带引号的字符串”s转换为常规的字符串(不带引号和转义字符)
//s可以是“单引号”、“双引号”或“反引号”引起来的字符串(包括引号本身)
//如果s是单引号引起来的字符串,则返回该该字符串代表的字符
funcUnquote(sstring)(string,error)
//UnquoteChar将带引号字符串(不包含首尾的引号)中的第一个字符“取消转义”并解码
//
//s:带引号字符串(不包含首尾的引号)
//quote:字符串使用的“引号符”(用于对字符串中的引号符“取消转义”)
//
//value:解码后的字符
//multibyte:value是否为多字节字符
//tail:字符串s解码后的剩余部分
//error:返回s中是否存在语法错误
//
//参数quote为“引号符”
//如果设置为单引号,则s中允许出现\'、"字符,不允许出现单独的'字符
//如果设置为双引号,则s中允许出现\"、'字符,不允许出现单独的"字符
//如果设置为0,则不允许出现\'或\"字符,但可以出现单独的'或"字符
funcUnquoteChar(sstring,quotebyte)(valuerune,multibytebool,tailstring,errerror)
------------------------------
//示例
funcmain(){
s1:="`Hello 世界!`"//解析反引号字符串
s2:=`"Hello\t\u4e16\u754c\uff01"`//解析双引号字符串
fmt.Println(strconv.Unquote(s1))//Hello 世界!<nil>
fmt.Println(strconv.Unquote(s2))//Hello 世界!<nil>
fmt.Println()
fmt.Println(strconv.UnquoteChar(`\u4e16\u754c\uff01`,0))
//19990true\u754c\uff01<nil>
fmt.Println(strconv.UnquoteChar(`\"abc\"`,'"'))
//34falseabc\"<nil>
}
------------------------------
//将各种类型转换为字符串后追加到dst尾部。
funcAppendInt(dst[]byte,iint64,baseint)[]byte
funcAppendUint(dst[]byte,iuint64,baseint)[]byte
funcAppendFloat(dst[]byte,ffloat64,fmtbyte,prec,bitSizeint)[]byte
funcAppendBool(dst[]byte,bbool)[]byte
//将各种类型转换为带引号字符串后追加到dst尾部。
funcAppendQuote(dst[]byte,sstring)[]byte
funcAppendQuoteToASCII(dst[]byte,sstring)[]byte
funcAppendQuoteToGraphic(dst[]byte,sstring)[]byte
funcAppendQuoteRune(dst[]byte,rrune)[]byte
funcAppendQuoteRuneToASCII(dst[]byte,rrune)[]byte
funcAppendQuoteRuneToGraphic(dst[]byte,rrune)[]byte
------------------------------------------------------------
本文内容总结:
原文链接:https://www.cnblogs.com/golove/p/3262925.html