2016-02-15 03:06:34 +00:00
|
|
|
|
### 3.5.5. 字符串和数字的转换
|
2015-12-16 06:03:43 +00:00
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
除了字符串、字符、字节之间的转换,字符串和数值之间的转换也比较常见。由strconv包提供这类转换功能。
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
将一个整数转为字符串,一种方法是用fmt.Sprintf返回一个格式化的字符串;另一个方法是用strconv.Itoa(“整数到ASCII”):
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
|
|
|
|
```Go
|
|
|
|
|
x := 123
|
|
|
|
|
y := fmt.Sprintf("%d", x)
|
|
|
|
|
fmt.Println(y, strconv.Itoa(x)) // "123 123"
|
|
|
|
|
```
|
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
FormatInt和FormatUint函数可以用不同的进制来格式化数字:
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
|
|
|
|
```Go
|
|
|
|
|
fmt.Println(strconv.FormatInt(int64(x), 2)) // "1111011"
|
|
|
|
|
```
|
|
|
|
|
|
2017-08-24 14:26:40 +00:00
|
|
|
|
fmt.Printf函数的%b、%d、%o和%x等参数提供功能往往比strconv包的Format函数方便很多,特别是在需要包含有附加额外信息的时候:
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
|
|
|
|
```Go
|
|
|
|
|
s := fmt.Sprintf("x=%b", x) // "x=1111011"
|
|
|
|
|
```
|
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
如果要将一个字符串解析为整数,可以使用strconv包的Atoi或ParseInt函数,还有用于解析无符号整数的ParseUint函数:
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
|
|
|
|
```Go
|
|
|
|
|
x, err := strconv.Atoi("123") // x is an int
|
|
|
|
|
y, err := strconv.ParseInt("123", 10, 64) // base 10, up to 64 bits
|
|
|
|
|
```
|
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
ParseInt函数的第三个参数是用于指定整型数的大小;例如16表示int16,0则表示int。在任何情况下,返回的结果y总是int64类型,你可以通过强制类型转换将它转为更小的整数类型。
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
有时候也会使用fmt.Scanf来解析输入的字符串和数字,特别是当字符串和数字混合在一行的时候,它可以灵活处理不完整或不规则的输入。
|
2015-12-17 01:42:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-16 06:03:43 +00:00
|
|
|
|
|