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

语言: CN / TW / HK

highlight: agate theme: channing-cyan


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

数值的进制

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

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

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

比如下面几种进制:

sh $ 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进制:

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

十进制转其他进制

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

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

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

其他进制间的转换

同样借助 bc 命令

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

「其他文章」