目录
因为课上老师要求进制换算 我又比较懒 刚好开着Goland,所以写了这一小串代码,用于实现二进制,八进制,十进制和十六进制之间的互相转换。办法比较愚笨,高见可留评论区。
整体构思
Golang中十进制转换成二、八、十六进制非常简单,使用占位符就可以得到结果,但是我个人使用的是:
strconv.FormatInt()
(因为这个看上去比占位符要高级一些)。
举个栗子:此处用于将十进制转换为二进制:num1为十进制,num2为转换后得到的二进制
num2 := strconv.FormatInt(num1, 2)
问题在于二,八,十六进制之间的转换。思路为将其全部转为十进制,再使用之前的方法进行输出。这里使用到了
strconv.ParseInt()
再举个栗子:此处用于将二进制转换为十进制
fmt.Println(strconv.ParseInt(num, 2, 32))
具体实现
package main
import (
"fmt"
"strconv"
)
func main() {
label1:
/*
在代码运行后,首先会询问用户,输入时的进制为多少。这里直接使用Switch。
case里面则是直接将其十进制进行输出,在拿到相应的十进制后再使用占位符,直接将其对应的
2,8或16进制输出
*/
var nn int
fmt.Println("原数字的进制是:(2/8/10/16)")
fmt.Scanln(&nn)
var sv = "1" //初始化变量,随便给了个值
switch nn {
case 2: //对应输入时为二进制
fmt.Println("输入一个二进制数:")
fmt.Scanln(&sv)
fmt.Println("他的十进制是:")
fmt.Println(strconv.ParseInt(sv, 2, 32)) // 2 to 10
case 8: //对应输入时为八进制
fmt.Println("输入一个八进制数:")
fmt.Scanln(&sv)
fmt.Println("他的十进制是:")
fmt.Println(strconv.ParseInt(sv, 8, 32)) // 8 to 10
case 10: //对应输入时为十进制,break出switch,然后直接运行后面的代码
break
case 16: //对应输入时为十六进制
fmt.Println("输入一个十六进制数:")
fmt.Scanln(&sv)
fmt.Println("他的十进制是:")
fmt.Println(strconv.ParseInt(sv, 16, 32)) // 16 to 10
default: //输入内容不在二、八、十、十六进制以内,咱们就输出一个 嘻嘻 吧
fmt.Println("嘻嘻")
goto label1
}
var v int64 = 1 //默认10进制,初始化变量,随便给了个值
fmt.Println("输入一个十进制数:")
fmt.Scanln(&v)
s2 := strconv.FormatInt(v, 2) // 10 to 2
fmt.Printf("二进制是:%v\n", s2)
s8 := strconv.FormatInt(v, 8) // 10 to 8
fmt.Printf("八进制是:%v\n", s8)
s16 := strconv.FormatInt(v, 16) //10 yo 16
fmt.Printf("十六进制是:%v\n", s16)
}