首页 文章资讯内容详情

Golang学习 - strconv 包

2026-06-01 2 花语

本文内容纲要:

------------------------------------------------------------ //将布尔值转换为字符串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