在Windows下可以通过计算器进行进制之间的转换,非常方便。本文总结Linux下可用的进行进制之间的转换方法。
利用shell
shell脚本默认数值是由10进制数处理,除非这个数字某种特殊的标记法或前缀开头,才可以表示其它进制类型数值。如:以0开头就是8进制、以0x开头就是16进制数。使用“BASE#NUMBER”这种形式可以表示其它进制。BASE值的范围为2-64。
其他进制转10进制
1
2
3
4
5
6
7
8
9
10
11
12
| kuring@T420:~$ echo $((16#4000000))
67108864
kuring@T420:~$ echo $((2#111))
7
kuring@T420:~$ echo $((0x10))
16
kuring@T420:~$ echo $((010))
8
// 对进制转换为10进制进行运算,稍显啰嗦
kuring@T420:~$ echo $(($((16#4000000))/1014/1024));
64
|
利用let命令
let用来执行算数运算和数值表达式测试。可以利用该命令完成简单的计算,并将计算结果赋给其他变量。
1
2
3
4
| // 对进制转换为10进制后进行运算,比纯shell方式简洁
kuring@T420:~$ let a=$((16#4000000))/1014/1024;
kuring@T420:~$ echo $a
64
|
利用bc命令
该命令是一个强大的计算器软件,可以利用其中的ibase和obase进行输入进制的转换,ibase表示输入数字的进制,obase表示输出数字的进制。
1
2
3
4
5
6
| // 如果没有制定,则默认为10进制
// 对于16进制,要使用F,而不能使用f
kuring@T420:~$ echo "ibase=16;FF" | bc
255
kuring@T420:~$ echo "obase=2;ibase=16;FF" | bc
11111111
|
参考文章
linux shell 不同进制数据转换(二进制,八进制,十六进制,base64)
Shell进制转换小结