Golang 示例--将十六进制转换为整数或从整数转换为十六进制

3,205 阅读4分钟

在这篇博文中,你将学习两个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  

总结

你学会了将十六进制转换成数字和数字转换成十六进制。这可以使用内置函数以及编写自定义函数来完成。