Go语言进制转换

Share on:

进制也就是进位制,是人为定义的带进位的计数方法,在我们的日常生活中有很多进制的例子,如:

  • 一分钟是六十秒,逢六十进一,就是六十进制;
  • 一天是二十四小时,逢二十四进一,就是二十四进制;
  • 一周是七天,逢七进一,就是七进制;
  • 一年是十二个月,逢十二进一,就是十二进制;
  • 数学中逢十进一,就是十进制。

编程中常用的几种进制:

二进制(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. 十进制转其它进制:
 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)

代码执行结果:

  1. 其它进制转十进制:
    使用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)

代码执行结果:

  1. 十六进制字符串与[]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))

代码执行结果: