linux极简小知识:30、shell中不同进制的表示和之间的转换(十进制、八进制、十六进制、二进制、任意进制)

3,065 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

数值的进制

Bash中数值默认都是十进制的。

如果想要使用不同的进制,可采用下面的表示形式:

  • number:没有任何特殊表示法的数字是十进制数。
  • 0number:数字0开头,表示八进制数。
  • 0xnumber:数字0x开头,表示十六进制数。
  • base#number:base进制的数,通过base指定是几进制。由此,可以表示任意的进制。

比如下面几种进制:

$ let a=100
$ let b=0100
$ let c=0x100
$ let d=2#100
$ echo "a=$a,b=$b,c=$c,d=$d"
a=100,b=64,c=256,d=4

也可以使用 (()) 获取进制值。

进制转换

其他进制转十进制

其他进制转十进制不需要特殊处理,获取值的,其表示形式就是10进制。

接上面的 a、b、c、d 变量。如下,查看其取值时为10进制:

$ let b10=b
$ let c10=c
$ let d10=d
$ echo $b10
64
$ echo $c10
256
$ echo $d10
4

十进制转其他进制

十进制转其他进制需要借助 bc 命令。指定 obase 为几进制。

如下,十进制分别转8、16、2进制。

$ echo "obase=8;$b10" | bc
100
$ echo "obase=16;$c10" | bc
100
$ echo "obase=2;$d10" | bc
100

其他进制间的转换

同样借助 bc 命令

$ echo "obase=2;$c10" | bc
100000000