首页 文章资讯内容详情

golang数据类型转换

2026-06-01 3 花语

本文内容纲要:

int--string

//string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_int)

int64--string

//string到int64 value_int64,err:=strconv.ParseInt(string,10,64) //int64到string,需注意下面转换规定 //FormatIntreturnsthestringrepresentationofiinthegivenbase,for2<=base<=36. //Theresultusesthelower-caselettersatozfordigitvalues>=10 str:=strconv.FormatInt(value_int64,10) //FormatInt第二个参数表示进制,10表示十进制。

float--string

//float转string v:=3.1415926535 s1:=strconv.FormatFloat(v,E,-1,32)//float32s2:=strconv.FormatFloat(v,E,-1,64)//float64 //第二个参数可选f/e/E等,含义如下: //b(-ddddp±ddd,二进制指数) //e(-d.dddde±dd,十进制指数) //E(-d.ddddE±dd,十进制指数) //f(-ddd.dddd,没有指数) //g(e:大指数,f:其它情况) //G(E:大指数,f:其它情况) //string转float s:="3.1415926535" v1,err:=strconv.ParseFloat(v,32) v2,err:=strconv.ParseFloat(v,64)

float--int

//这个就很简单了 varaint64 a=1 varbfloat64 b=2.000 //a--float64 c:=float64(a) //b--int64 d:=int64(b) //interface{}到float64-------接口后加上.(float64) //interface{}到string-------接口后加上.(string) 下面是关于golangstrconv的使用 //atob.go ------------------------------------------------------------ //ParseBool将字符串转换为布尔值 //它接受真值:1,t,T,TRUE,true,True //它接受假值:0,f,F,FALSE,false,False. //其它任何值都返回一个错误 funcParseBool(strstring)(valuebool,errerror) funcmain(){ 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")) //falsestrconv.ParseBool:parsing"TRue":invalidsyntax 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")) //falsestrconv.ParseBool:parsing"FAlse":invalidsyntax } ------------------------------------------------------------ //FormatBool将布尔值转换为字符串"true"或"false" funcFormatBool(bbool)string funcmain(){ fmt.Println(strconv.FormatBool(0<1))//true fmt.Println(strconv.FormatBool(0>1))//false } ------------------------------------------------------------ //AppendBool将布尔值b转换为字符串"true"或"false" //然后将结果追加到dst的尾部,返回追加后的[]bytefunc AppendBool(dst[]byte,bbool)[]byte funcmain(){ 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 } ============================================================ //atof.go ------------------------------------------------------------ //ParseFloat将字符串转换为浮点数 //s:要转换的字符串 //bitSize:指定浮点类型(32:float32、64:float64) //如果s是合法的格式,而且接近一个浮点值, //则返回浮点数的四舍五入值(依据IEEE754的四舍五入标准) //如果s不是合法的格式,则返回“语法错误” //如果转换结果超出bitSize范围,则返回“超出范围” funcParseFloat(sstring,bitSizeint)(ffloat64,errerror) 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 } ============================================================ //atoi.go ------------------------------------------------------------ //ErrRange表示值超出范围varErrRange=errors.New("valueoutofrange") //ErrSyntax表示语法不正确varErrSyntax=errors.New("invalidsyntax") //NumError记录转换失败 typeNumErrorstruct{ Funcstring//失败的函数名(ParseBool,ParseInt,ParseUint,ParseFloat) Numstring//输入的值 Errerror//失败的原因(ErrRange,ErrSyntax) } //int或uint类型的长度(32或64) constIntSize=intSize constintSize=32<<uint(^uint(0)>>63) //实现Error接口,输出错误信息 func(e*NumError)Error()string ------------------------------------------------------------ //ParseInt将字符串转换为int类型 //s:要转换的字符串 //base:进位制(2进制到36进制) //bitSize:指定整数类型(0:int、8:int8、16:int16、32:int32、64:int64) //返回转换后的结果和转换时遇到的错误 //如果base为0,则根据字符串的前缀判断进位制(0x:16,0:8,其它:10) funcParseInt(sstring,baseint,bitSizeint)(iint64,errerror) funcmain(){ fmt.Println(strconv.ParseInt("123",10,8)) //123 fmt.Println(strconv.ParseInt("12345",10,8)) //127strconv.ParseInt:parsing"12345":valueoutofrange fmt.Println(strconv.ParseInt("2147483647",10,0)) //2147483647 fmt.Println(strconv.ParseInt("0xFF",16,0)) //0strconv.ParseInt:parsing"0xFF":invalidsyntax fmt.Println(strconv.ParseInt("FF",16,0)) //255 fmt.Println(strconv.ParseInt("0xFF",0,0)) //255 } ------------------------------------------------------------ //ParseUint功能同ParseInt一样,只不过返回uint类型整数 funcParseUint(sstring,baseint,bitSizeint)(nuint64,errerror) funcmain(){ fmt.Println(strconv.ParseUint("FF",16,8)) //255 } ------------------------------------------------------------ //Atoi相当于ParseInt(s,10,0) //通常使用这个函数,而不使用 ParseIntfuncAtoi(sstring)(iint,errerror) funcmain(){ fmt.Println(strconv.Atoi("2147483647")) //2147483647 fmt.Println(strconv.Atoi("2147483648")) //2147483647strconv.ParseInt:parsing"2147483648":valueoutofrange } ============================================================ //ftoa.go ------------------------------------------------------------ //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 funcmain(){ 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 } ------------------------------------------------------------ //AppendFloat将浮点数f转换为字符串值,并将转换结果追加到dst的尾部 //返回追加后的[]bytefunc AppendFloat(dst[]byte,ffloat64,fmtbyte,precint,bitSizeint)[]byte funcmain(){ 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.123461.00123e+0 } ============================================================ //itoa.go ------------------------------------------------------------ //FormatUint将int型整数i转换为字符串形式 //base:进位制(2进制到36进制) //大于10进制的数,返回值使用小写字母a到zfunc FormatInt(iint64,baseint)string funcmain(){ 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 } ------------------------------------------------------------ //FormatUint将uint型整数i转换为字符串形式 //base:进位制(2进制到36进制) //大于10进制的数,返回值使用小写字母a到zfunc FormatUint(iuint64,baseint)string funcmain(){ i:=uint64(2048) fmt.Println(strconv.FormatUint(i,2))//100000000000 fmt.Println(strconv.FormatUint(i,8))//4000 fmt.Println(strconv.FormatUint(i,10))//2048 fmt.Println(strconv.FormatUint(i,16))//800 fmt.Println(strconv.FormatUint(i,36))//1kw } ------------------------------------------------------------ //Itoa相当于FormatInt(i,10)funcItoa(iint)string funcmain(){ fmt.Println(strconv.Itoa(-2048))//-2048 fmt.Println(strconv.Itoa(2048))//2048 } ------------------------------------------------------------ //AppendInt将int型整数i转换为字符串形式,并追加到dst的尾部 //i:要转换的字符串 //base:进位制 //返回追加后的[]bytefunc AppendInt(dst[]byte,iint64,baseint)[]byte funcmain(){ b:=make([]byte,0) b=strconv.AppendInt(b,-2048,16) fmt.Printf("%s",b)//-800 } ------------------------------------------------------------ //AppendUint将uint型整数i转换为字符串形式,并追加到dst的尾部 //i:要转换的字符串 //base:进位制 //返回追加后的[]bytefunc AppendUint(dst[]byte,iuint64,baseint)[]byte funcmain(){ b:=make([]byte,0) b=strconv.AppendUint(b,2048,16) fmt.Printf("%s",b)//800 } ============================================================ //quote.go ------------------------------------------------------------ //Quote将字符串s转换为“双引号”引起来的字符串 //其中的特殊字符将被转换为“转义字符” //“不可显示的字符”将被转换为“转义字符” funcQuote(sstring)string funcmain(){ fmt.Println(strconv.Quote(`C:\Windows`)) //"C:\\Windows" } ------------------------------------------------------------ //AppendQuote将字符串s转换为“双引号”引起来的字符串, //并将结果追加到dst的尾部,返回追加后的[]byte //其中的特殊字符将被转换为“转义字符”func AppendQuote(dst[]byte,sstring)[]byte funcmain(){ s:=`C:\Windows` b:=make([]byte,0) b=strconv.AppendQuote(b,s) fmt.Printf("%s",b)//"C:\\Windows" } ------------------------------------------------------------ //QuoteToASCII将字符串s转换为“双引号”引起来的ASCII字符串 //“非ASCII字符”和“特殊字符”将被转换为“转义字符” funcQuoteToASCII(sstring)string funcmain(){ fmt.Println(strconv.QuoteToASCII("Hello世界!")) //"Hello\u4e16\u754c\uff01" } ------------------------------------------------------------ //AppendQuoteToASCII将字符串s转换为“双引号”引起来的ASCII字符串, //并将结果追加到dst的尾部,返回追加后的[]byte //“非ASCII字符”和“特殊字符”将被转换为“转义字符” funcAppendQuoteToASCII(dst[]byte,sstring)[]byte funcmain(){ s:="Hello世界!" b:=make([]byte,0) b=strconv.AppendQuoteToASCII(b,s) fmt.Printf("%s",b)//"Hello\u4e16\u754c\uff01" } ------------------------------------------------------------ //QuoteRune将Unicode字符转换为“单引号”引起来的字符串 //“特殊字符”将被转换为“转义字符” funcQuoteRune(rrune)string funcmain(){ fmt.Println(strconv.QuoteRune(好)) //好 } ------------------------------------------------------------ //AppendQuoteRune将Unicode字符转换为“单引号”引起来的字符串, //并将结果追加到dst的尾部,返回追加后的[]byte //“特殊字符”将被转换为“转义字符” funcAppendQuoteRune(dst[]byte,rrune)[]byte funcmain(){ b:=make([]byte,0) b=strconv.AppendQuoteRune(b,好) fmt.Printf("%s",b)//好 } ------------------------------------------------------------ //QuoteRuneToASCII将Unicode字符转换为“单引号”引起来的ASCII字符串 //“非ASCII字符”和“特殊字符”将被转换为“转义字符” funcQuoteRuneToASCII(rrune)string funcmain(){ fmt.Println(strconv.QuoteRuneToASCII(好)) //\u597d } ------------------------------------------------------------ //AppendQuoteRune将Unicode字符转换为“单引号”引起来的ASCII字符串, //并将结果追加到dst的尾部,返回追加后的[]byte //“非ASCII字符”和“特殊字符”将被转换为“转义字符” funcAppendQuoteRuneToASCII(dst[]byte,rrune)[]byte funcmain(){ b:=make([]byte,0) b=strconv.AppendQuoteRuneToASCII(b,好) fmt.Printf("%s",b)//\u597d } ------------------------------------------------------------ //CanBackquote判断字符串s是否可以表示为一个单行的“反引号”字符串 //字符串中不能含有控制字符(除了\t)和“反引号”字符,否则返回false funcCanBackquote(sstring)bool funcmain(){ b:=strconv.CanBackquote("C:\\Windows\n") fmt.Println(b)//false b=strconv.CanBackquote("C:\\Windows\r") fmt.Println(b)//false b=strconv.CanBackquote("C:\\Windows\f") fmt.Println(b)//false b=strconv.CanBackquote("C:\\Windows\t") fmt.Println(b)//true b=strconv.CanBackquote("C:\\`Windows`") fmt.Println(b)//false } ------------------------------------------------------------ //UnquoteChar将s中的第一个字符“取消转义”并解码 ////s:转义后的字符串 //quote:字符串使用的“引号符”(用于对引号符“取消转义”) ////value:解码后的字符 //multibyte:value是否为多字节字符 //tail:字符串s除去value后的剩余部分 //error:返回s中是否存在语法错误 ////参数quote为“引号符” //如果设置为单引号,则s中允许出现\字符,不允许出现单独的字符 //如果设置为双引号,则s中允许出现\"字符,不允许出现单独的"字符 //如果设置为0,则不允许出现\或\"字符,可以出现单独的或"字符 funcUnquoteChar(sstring,quotebyte)(valuerune,multibytebool,tailstring,errerror) funcmain(){ s:=`\"大\\家\\好!\"` c,mb,sr,_:=strconv.UnquoteChar(s,") fmt.Printf("%-3c%v\n",c,mb) for;len(sr)>0;c,mb,sr,_=strconv.UnquoteChar(sr,"){ fmt.Printf("%-3c%v\n",c,mb) } //"false //大true //\false //家true //\false //好true //!true } ------------------------------------------------------------ //Unquote将“带引号的字符串”s转换为常规的字符串(不带引号和转义字符) //s可以是“单引号”、“双引号”或“反引号”引起来的字符串(包括引号本身) //如果s是单引号引起来的字符串,则返回该该字符串代表的字符 funcUnquote(sstring)(tstring,errerror) funcmain(){ sr,err:=strconv.Unquote(`"\"大\t家\t好!\""`) fmt.Println(sr,err) sr,err=strconv.Unquote(`大家好!`) fmt.Println(sr,err) sr,err=strconv.Unquote(`好`) fmt.Println(sr,err) sr,err=strconv.Unquote("`大\\t家\\t好!`") fmt.Println(sr,err) } ------------------------------------------------------------ //IsPrint判断Unicode字符r是否是一个可显示的字符 //可否显示并不是你想象的那样,比如空格可以显示,而\t则不能显示 //具体可以参考Go语言的源码 funcIsPrint(rrune)bool funcmain(){ fmt.Println(strconv.IsPrint(a))//true fmt.Println(strconv.IsPrint(好))//true fmt.Println(strconv.IsPrint())//true fmt.Println(strconv.IsPrint(\t))//false fmt.Println(strconv.IsPrint(\n))//false fmt.Println(strconv.IsPrint(0))//false }

本文内容总结:

原文链接:https://www.cnblogs.com/K-artorias/p/8819957.html