Linux/UNIX:将十六进制转换为十进制数

时间:2020-01-09 10:42:10  来源:igfitidea点击:

在UNIX/Linux操作系统下,如何使用Shell脚本将十六进制数转换为十进制数?
十六进制(hex)是一个基数为16的数字系统,它使用十六个不同的符号,大多数情况下使用符号09表示值0至9,以及A,B,C,D,E,F(或者a到f)表示十到十五的值。

bc任意精度计算器语言

无需编写shell脚本。
您可以在shell提示符下简单地使用以下语法将十六进制转换为十进制数字,反之亦然。

bc:十六进制或者二进制转换

要转换为十进制,请将ibase设置为16,执行:

echo "ibase=16; hex-number"|bc
echo "ibase=16; FFF"|bc

输出示例:

4095

要转换为十六进制,请将obase设置为16,执行:

echo "obase=16; decimal-number"|bc
echo "obase=16; 10"|bc

输出示例:

A

ibase和obase定义了bc下输入和输出数字的转换基础。
输入和输出的默认值为10。
将以下函数添加到~/.bashrc中:

h2d(){
  echo "ibase=16; $@"|bc
}
d2h(){
  echo "obase=16; $@"|bc
}

可以在命令行中按以下方式使用以上两个功能:

$ h2d 100
$ d2h AC

使用内置的printf shell进行基本转换

您还可以使用内置的shell和/usr/bin/printf使用printf。
要将十进制转换为十六进制,请执行:

printf "%x\n" 4095

输出示例:

fff

要将十六进制转换为十进制,请执行:

printf "%d\n" 0xfff

输出示例:

4095

您可以将结果保存到shell变量中,并使用printf或者echo命令将其打印出来:

output=$(printf "%d\n" 0xfff)
echo "${output}"
printf "%d\n" $output