golang数据类型转换

int--string

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

int64--string

1
2
3
4
5
6
//string到int64
value_int64, err := strconv.ParseInt(string, 10, 64)
//int64到string,需注意下面转换规定
//FormatInt returns the string representation of i in the given base, for 2 <= base <= 36.
//The result uses the lower-case letters 'a' to 'z' for digit values >= 10
str:=strconv.FormatInt(value_int64,10)<br> //FormatInt第二个参数表示进制,10表示十进制。

float--string

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//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

1
2
3
4
5
6
7
8
9
10
11
//这个就很简单了
var  a int64
a = 1
var  b float64
b = 2.000
 
//a -- float64
c := float64(a)
 
//b -- int64
d := int64(b)

//interface{}到float64-------接口后加上 .(float64) //interface{}到string-------接口后加上 .(string)

下面是关于golang strconv的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
// atob.go
         ------------------------------------------------------------
         // ParseBool 将字符串转换为布尔值
         // 它接受真值:1, t, T, TRUE, true, True
         // 它接受假值:0, f, F, FALSE, false, False.
         // 其它任何值都返回一个错误
         func  ParseBool(str string) (value bool, err error)
         func  main() {
     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" ))   // false strconv.ParseBool: parsing "TRue": invalid syntax
     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" ))  // false strconv.ParseBool: parsing "FAlse": invalid syntax
     }
 
------------------------------------------------------------
// FormatBool 将布尔值转换为字符串 "true" 或 "false"
func  FormatBool(b bool) string
func  main() {
     fmt.Println(strconv.FormatBool(0 < 1))  // true
     fmt.Println(strconv.FormatBool(0 > 1))  // false
     }
 
------------------------------------------------------------
// AppendBool 将布尔值 b 转换为字符串 "true" 或 "false"
// 然后将结果追加到 dst 的尾部,返回追加后的 []bytefunc
AppendBool(dst []byte, b bool) []byte
func  main() {
     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 范围,则返回“超出范围”
func  ParseFloat(s string, bitSize int) (f float64, err error)
func  main() {
     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 表示值超出范围var ErrRange = errors.New("value out of range")
// ErrSyntax 表示语法不正确var ErrSyntax = errors.New("invalid syntax")
// NumError 记录转换失败
type  NumError  struct  {
     Func string  // 失败的函数名(ParseBool, ParseInt, ParseUint, ParseFloat)
     Num  string  // 输入的值
     Err  error   // 失败的原因(ErrRange, ErrSyntax)
     }
     // int 或 uint 类型的长度(32 或 64)
     const  IntSize = intSize
         const  intSize = 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)
func  ParseInt(s string, base int, bitSize int) (i int64, err error)
func  main() {
     fmt.Println(strconv.ParseInt( "123" , 10, 8))  // 123
     fmt.Println(strconv.ParseInt( "12345" , 10, 8))    // 127 strconv.ParseInt: parsing "12345": value out of range
     fmt.Println(strconv.ParseInt( "2147483647" , 10, 0))   // 2147483647
     fmt.Println(strconv.ParseInt( "0xFF" , 16, 0))     // 0 strconv.ParseInt: parsing "0xFF": invalid syntax
     fmt.Println(strconv.ParseInt( "FF" , 16, 0))   // 255
     fmt.Println(strconv.ParseInt( "0xFF" , 0, 0))  // 255
     }
 
------------------------------------------------------------
// ParseUint 功能同 ParseInt 一样,只不过返回 uint 类型整数
func  ParseUint(s string, base int, bitSize int) (n uint64, err error)
func  main() {
     fmt.Println(strconv.ParseUint( "FF" , 16, 8))  // 255
     }
 
------------------------------------------------------------
// Atoi 相当于 ParseInt(s, 10, 0)
// 通常使用这个函数,而不使用
ParseIntfunc Atoi(s string) (i int, err error)
func  main() {
     fmt.Println(strconv.Atoi( "2147483647" ))  // 2147483647
     fmt.Println(strconv.Atoi( "2147483648" ))  // 2147483647 strconv.ParseInt: parsing "2147483648": value out of range
     }
 
 
 
============================================================
// 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 表示总的数字位数(整数部分+小数部分)
func  FormatFloat(f float64, fmt byte, prec, bitSize int) string
func  main() {
     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, f float64, fmt byte, prec int, bitSize int) []byte
func  main() {
     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.12346   1.00123e+0
     }
 
 
============================================================
// itoa.go
------------------------------------------------------------
// FormatUint 将 int 型整数 i 转换为字符串形式
// base:进位制(2 进制到 36 进制)
// 大于 10 进制的数,返回值使用小写字母 'a' 到 'z'func
FormatInt(i int64, base int) string
func  main() {
     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(i uint64, base int) string
func  main() {
     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)func Itoa(i int) string
func  main() {
     fmt.Println(strconv.Itoa(-2048))  // -2048
     fmt.Println(strconv.Itoa(2048))   // 2048
     }
 
------------------------------------------------------------
// AppendInt 将 int 型整数 i 转换为字符串形式,并追加到 dst 的尾部
// i:要转换的字符串
// base:进位制
// 返回追加后的 []bytefunc
AppendInt(dst []byte, i int64, base int) []byte
func  main() {
     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, i uint64, base int) []byte
func  main() {
     b := make([]byte, 0)
     b = strconv.AppendUint(b, 2048, 16)
     fmt.Printf( "%s" , b)  // 800
     }
 
 
 
============================================================
// quote.go
------------------------------------------------------------
// Quote 将字符串 s 转换为“双引号”引起来的字符串
// 其中的特殊字符将被转换为“转义字符”
// “不可显示的字符”将被转换为“转义字符”
func  Quote(s string) string
func  main() {
     fmt.Println(strconv.Quote(`C:\Windows`))     // "C:\\Windows"
     }
 
------------------------------------------------------------
// AppendQuote 将字符串 s 转换为“双引号”引起来的字符串,
// 并将结果追加到 dst 的尾部,返回追加后的 []byte
// 其中的特殊字符将被转换为“转义字符”func
AppendQuote(dst []byte, s string) []byte
func  main() {
     s := `C:\Windows`
     b := make([]byte, 0)
     b = strconv.AppendQuote(b, s)
     fmt.Printf( "%s" , b)  // "C:\\Windows"
     }
 
------------------------------------------------------------
// QuoteToASCII 将字符串 s 转换为“双引号”引起来的 ASCII 字符串
// “非 ASCII 字符”和“特殊字符”将被转换为“转义字符”
func  QuoteToASCII(s string) string
func  main() {
     fmt.Println(strconv.QuoteToASCII( "Hello 世界!" ))   // "Hello \u4e16\u754c\uff01"
     }
 
------------------------------------------------------------
// AppendQuoteToASCII 将字符串 s 转换为“双引号”引起来的 ASCII 字符串,
// 并将结果追加到 dst 的尾部,返回追加后的 []byte
// “非 ASCII 字符”和“特殊字符”将被转换为“转义字符”
func  AppendQuoteToASCII(dst []byte, s string) []byte
func  main() {
     s :=  "Hello 世界!"
     b := make([]byte, 0)
     b = strconv.AppendQuoteToASCII(b, s)
     fmt.Printf( "%s" , b)  // "Hello \u4e16\u754c\uff01"
     }
 
------------------------------------------------------------
// QuoteRune 将 Unicode 字符转换为“单引号”引起来的字符串
// “特殊字符”将被转换为“转义字符”
func  QuoteRune(r rune) string
func  main() {
     fmt.Println(strconv.QuoteRune( '好' ))  // '好'
     }
 
------------------------------------------------------------
// AppendQuoteRune 将 Unicode 字符转换为“单引号”引起来的字符串,
// 并将结果追加到 dst 的尾部,返回追加后的 []byte
// “特殊字符”将被转换为“转义字符”
func  AppendQuoteRune(dst []byte, r rune) []byte
func  main() {
     b := make([]byte, 0)
     b = strconv.AppendQuoteRune(b,  '好' )
     fmt.Printf( "%s" , b)  // '好'
     }
 
------------------------------------------------------------
// QuoteRuneToASCII 将 Unicode 字符转换为“单引号”引起来的 ASCII 字符串
// “非 ASCII 字符”和“特殊字符”将被转换为“转义字符”
func  QuoteRuneToASCII(r rune) string
func  main() {
     fmt.Println(strconv.QuoteRuneToASCII( '好' ))   // '\u597d'
     }
 
------------------------------------------------------------
// AppendQuoteRune 将 Unicode 字符转换为“单引号”引起来的 ASCII 字符串,
// 并将结果追加到 dst 的尾部,返回追加后的 []byte
// “非 ASCII 字符”和“特殊字符”将被转换为“转义字符”
func  AppendQuoteRuneToASCII(dst []byte, r rune) []byte
func  main() {
     b := make([]byte, 0)
     b = strconv.AppendQuoteRuneToASCII(b,  '好' )
     fmt.Printf( "%s" , b)  // '\u597d'
     }
 
------------------------------------------------------------
// CanBackquote 判断字符串 s 是否可以表示为一个单行的“反引号”字符串
// 字符串中不能含有控制字符(除了 \t)和“反引号”字符,否则返回 false
func  CanBackquote(s string) bool
func  main() {
     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,则不允许出现 \' 或 \" 字符,可以出现单独的 ' 或 " 字符
func  UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
func  main() {
     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 是单引号引起来的字符串,则返回该该字符串代表的字符
func  Unquote(s string) (t string, err error)
func  main() {
     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 语言的源码
func  IsPrint(r rune) bool
func  main() {
     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
     }

  

猜你喜欢

转载自www.cnblogs.com/ExMan/p/11459655.html