Overview
- 在Go代码中
- 十进制,整型的方式存在
- 其他进制,以字符串的方式存在
- 整型为十进制
Description
1)十进制转二进制
默认整型都是十进制类型,所以转换整型也就是转换十进制
整型(十进制)进制转换使用strconv.FormatInt()
可以看到,这个内置函数包含2个值,第一个是int64,第二个是base int
int64意思是这里需要放入int64的值, 如果不是则需要先将其转换为int64
int64(number) base int意思是这里指定转换为某个进制,二进制就是2,八进制就是8,十进制就是10,十六进制就是16....
将整形5转换为二进制:
所以整形5的二进制是101
package main
import (
"fmt"
"strconv"
)
func main() {
var v1 int = 5
v2 := strconv.FormatInt(int64(v1), 2)
fmt.Println(v2)
}
2)其他进制转十进制
其他进制(字符串)转换十进制用strconv.ParseInt()
可以看到,这个内置函数包含3个值,返回值包含int64和error
第一个是string,第二个是base int,第三个是bitsize int
string这里是写的是想要转换的其他进制(字符串)
base int是想要以什么进制的格式进行转换,比如以二进制的形式转换为十进制,这里就写2,要以八进制的形式进行住那还为十进制,这里就写8,这个取决于字节的string是二进制还是八进制或者...
bitsize int:我们在转换的时候有可能自己的string特别大,这导致转换后的结果无法显示,如果写的是8,那么结果的范围只是int8 (-128 -> 127),string的结果不在这个范围则无法显示,所以这里就是对转换后的结果做约束的,字节的结果如果范围在int16 (-32768 -> 32767),那么我们这里填16则就意味着转换后的结果将会在这个范围内查找,如果刚好在这个范围内,则转换成功,写0则是int类型
错误的bitsize lnt范围例子strconv.ParseInt():
返回: 127 strconv.ParseInt: parsing "100101110101": value out of range,这里说的是100101110101以二进制的方式转换成十进制,结果超出了int8的范围,则无法显示
正确的bitsize int范围例子strconv.ParseInt():
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
var v1 string = "100101110101"
v2, err := strconv.ParseInt(v1, 2, 16)
fmt.Println(v2, err, reflect.TypeOf(v2))
}
返回:2421 <nil> int64 所以100101110101转换成十进制后的值是2421 nil代表空,转换成功
int64: 这里就有疑问了,自己设置的范围是int16,为什么结果返回了一个int64?
--->在Go 语言中,默认会将转换后的进制设定为int64,我们在代码里写的bigsize int= 16,只是起着限制约束作用,而输出的结果会按照go语言的默认设定为int64
3)其他进制互相转换
二进制转换十六进制
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
var v1 string = "10011"
v2, _ := strconv.ParseInt(v1, 2, 8)
v3 := strconv.FormatInt(v2, 16)
fmt.Println(v3, reflect.TypeOf(v2), reflect.TypeOf(v3))
}
因为二进制无法直接转为十六进制,所以先需要转换为十进制,再将其转换为十六进制
而且可以看到,这里strconv.FormatInt() 要求写Int64,但是却没写,是因为strconv.ParseInt()转换后默认就是整型(十进制),因为是在64位系统上操作,默认就是int64