Go语言进制转换
进制也就是进位制,是人为定义的带进位的计数方法,在我们的日常生活中有很多进制的例子,如:
- 一分钟是六十秒,逢六十进一,就是六十进制;
- 一天是二十四小时,逢二十四进一,就是二十四进制;
- 一周是七天,逢七进一,就是七进制;
- 一年是十二个月,逢十二进一,就是十二进制;
- 数学中逢十进一,就是十进制。
编程中常用的几种进制:
二进制(Binary,缩写BIN):
二进制数据就是用0和1两个数字来表示的数,它的基数为2,进位规则是"逢二进一”,借位规则是"借一当二”。Go语言中不能直接使用二进制表示整数。
八进制(Octal,缩写OCT):
采用0,1,2,3,4,5,6,7这八个数字来表示的数,他的基数为8,进位规则是"逢八进一”,借位规则是"借一当八”。以数字0开始表示八进制。
十进制(Decimal,缩写DEC):
采用0,1,2,3,4,5,6,7,8,9这十个数字来表示的数,它的基数为10,进位规则是"逢十进一”,借位规则是"借一当十”。
十六进制(Hexadecimal,缩写HEX):
采用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这十个数字[0-9]和六个字母[A-F]来表示的数,它的基数为16,进位规则是"逢十六进一”,借位规则是"借一当十六”。以0x或0X开始表示十六进制。
Go中进制转换
- 十进制转其它进制:
1// 自动推导类型的变量默认是十进制(Decimal,缩写DEC)的数字
2
3// %b: 是一个占位符,表示一个二进制(Binary,缩写BIN)格式的数字
4fmt.Printf("十进制转二进制表示为:[%b]\n", 2021)
5
6// %o: 是一个占位符,表示一个八进制(Octal,缩写OCT)格式的数字
7fmt.Printf("十进制转八进制表示为:[%b]\n", 2021)
8
9// %x|%X: 是一个占位符,表示一个十六进制(Hexadecimal,缩写HEX)格式的数字
10fmt.Printf("十进制转十六进制表示为:[%x]\n", 2021)
11fmt.Printf("十进制转十六进制表示为:[%X]\n", 2021)
代码执行结果:
- 其它进制转十进制:
使用strconv.ParseInt(s string, base int, bitSize int)
方法进行转换。
- base: (0, 2 to 64) 输入字符对应的进制
- bigSize: (0, 8, 16, 32, 64)分别代表(int, int8, int16, int32, int64)
1parseInt1, _ := strconv.ParseInt("11111100101", 2, 0)
2fmt.Println("二进制转十进制:", parseInt1)
3
4parseInt2, _ := strconv.ParseInt("3745", 8, 0)
5fmt.Println("八进制转十进制:", parseInt2)
6
7parseInt3, _ := strconv.ParseInt("7e5", 16, 0)
8fmt.Println("十六进制转十进制:", parseInt3)
代码执行结果:
- 十六进制字符串与[]byte转换
1s := []byte("Hello")
2fmt.Println("Hello转为[]byte:", s)
3
4// []byte -> String
5encodeStr := hex.EncodeToString(s)
6fmt.Println("[]byte转为十六进制字符串:", encodeStr)
7
8// String -> []byte
9bytes, _ := hex.DecodeString(encodeStr)
10fmt.Println("十六进制字符串转为[]byte:", bytes)
11fmt.Println("[]byte转为字符串:", string(bytes))
代码执行结果: