golang数据类型转换
本文内容纲要:
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-caseletters'a'to'z'fordigitvalues>=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'到'z'func
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'到'z'func
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