在这篇博文中,你将学习两个Go语言的程序,第一个程序是将十六进制转换成十进制整数。第二个程序是将十进制数转换为十六进制数。
Golang十六进制数系统
十六进制数也被称为Hexa数,包含16位数字,即从0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F开始的数字。它是基于16进制,即Hexa数字系统。所以HexaDecimal包含十进制数字,0-9(基数10)和额外的6个字母 - A到F。
在Golang中,十六进制数字总是以0x或0X为前缀,或以普通数字为前缀,例如十六进制数字是0x12F或0X34A,23A。
十进制数是包含以10为基数的数字,即从0到9开始的数字,例如十进制数是25。
下面的程序从用户的键盘控制台获取输入并存储在相应的变量中。
十六进制数字转换为十进制数字的程序示例
我们有两种方法将十六进制数转换成十进制数,如下所示
- 使用strconv ParseInt函数
- 使用strconv ParseUint函数
strconv ParseInt函数将十六进制数转换为十进制整数的例子
strconv软件包提供了ParseInt函数,可以进行不同类型的转换。parseInt函数用于将给定的Hexa格式的字符串转换为十进制数字。请注意,这个函数的基数是16。
给定的输入字符串被存储在变量hexaNumber中。
有效的hexaNumber值可以接受 - 23a,0x23a,0X23a。
如果hexaNumber字符串前缀为0x或0X,strconv.ParseInt()会抛出错误 strconv.ParseInt:解析 "0x23A":无效的语法
所以我们必须写一个函数,用空字符串替换0x或0X。
这里有一个完整的函数来替换长的十六进制数字
func hexaNumberToInteger(hexaString string) string {
// replace 0x or 0X with empty String
numberStr := strings.Replace(hexaString, "0x", "", -1)
numberStr = strings.Replace(numberStr, "0X", "", -1)
return numberStr
}
下面是一个完整的将长十六进制数转换为十进制整数的例子
package main
import (
"fmt"
"math"
"strconv"
"strings"
)
func hexaNumberToInteger(hexaString string) string {
// replace 0x or 0X with empty String
numberStr := strings.Replace(hexaString, "0x", "", -1)
numberStr = strings.Replace(numberStr, "0X", "", -1)
return numberStr
}
func main() {
var hexaNumber string
fmt.Print("Enter Hexadecimal Number:")
fmt.Scanln(&hexaNumber)
output, err := strconv.ParseInt(hexaNumberToInteger(hexaNumber), 16, 64)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Output %d", output)
}
当上述程序被编译和执行时,输出为
Enter Hexadecimal Number:23a
Output 570
例如,如果输入的数字是23a,那么输出是570 输出的计算结果是2*16*16+3*16+10*16
strconv ParseUint函数将十六进制转换成数字的例子
strconv软件包为有符号和无符号数字提供了各种函数,如ParseInt函数,ParseUint函数用于转换无符号整数 ParseInt函数用于转换十六进制格式的给定字符串,转换为十进制数字。请注意,提供给该函数的基数是16。
下面是一个将十六进制转换为十进制的uint64类型的程序示例
package main
import (
"fmt"
"strconv"
"strings"
)
func hexaNumberToInteger(hexaString string) string {
// replace 0x or 0X with empty String
numberStr := strings.Replace(hexaString, "0x", "", -1)
numberStr = strings.Replace(numberStr, "0X", "", -1)
return numberStr
}
func main() {
var hexaNumber string
fmt.Print("Enter Hexadecimal Number:")
fmt.Scanln(&hexaNumber)
output, err := strconv.ParseUint(hexaNumberToInteger(hexaNumber), 16, 64)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Output %d", output)
}
上述程序的输出是
Enter Hexadecimal Number:0x25
Output 37
将十进制数转换为十六进制数的示例程序
在Golang中,我们有两种方法将十进制数转换为十六进制数。下面是两种方法,如下所示
- 使用strconv FormatInt函数
- 使用strconv FormatUint函数
下面的程序从键盘控制台获取十进制输入数字,并将其存储在变量十进制中。
strconv FormatInt函数将十进制数转换为十六进制数的例子
strconv内置的标准包提供了FormatInt函数,用于将十进制数转换为十六进制数。下面是一个将十进制整数转换为十六进制数的示例程序
package main
import (
"fmt"
"strconv"
)
func main() {
var decimal int64
fmt.Print("Enter Decimal Number:")
fmt.Scanln(&decimal)
output := strconv.FormatInt(decimal, 16)
fmt.Print("Output ", output)
}
输出是
Enter Decimal Number:29
Output 1d
strconv FormatUint函数转换十进制数为十六进制数的例子
strconv包FormatUint函数你可以使用Uint64转换为十六进制数字。下面是一个将无符号整数转换成十六进制数的示例程序。
package main
import (
"fmt"
"strconv"
)
func main() {
var decimal uint64
fmt.Print("Enter Decimal Number:")
fmt.Scanln(&decimal)
output := strconv.FormatUint(decimal, 16)
fmt.Print("Output ", output)
}
输出为
Enter Decimal Number:30
Output 1e
总结
你学会了将十六进制转换成数字和数字转换成十六进制。这可以使用内置函数以及编写自定义函数来完成。