Linux Bash:进制间转换

6,600 阅读1分钟

今天写脚本,需要用到把10进制数转换成16进制数。网上搜了一下瞬间就得到了答案。

有三种方法,echo,printf,bc 等命令。我认为,最常用的应该是10进制与16进制转换,所以printf应该是最简单直观的,而且语法很C一样,记住这个就好。最强大的bc,可以任意转换。

1. echo,printf

# 二进制转十进制
echo $[2#1100]
echo $((2#1100))

# 十六进制转十进制
echo $[16#ff]
printf %d 0xac

# 八进制转十进制
echo $[8#100]

# 十进制转十六进制
printf %x 172  

2. bc 命令

格式为:echo "obase=16 ; ibase=2 ; number" | bc ,其中obase代表输出进制,ibase代表输入进制,number表示ibase进制对应的数字。

注意:为10时可不设置ibase obase的值,obase要尽量放在ibase前,因为ibase设置后,后面的数字都是以ibase的进制来换算的。同时16进制字母必须大写。

echo "ibase=16;obase=2;FFEE" | bc  

echo "ibase=8;obase=2;67"  |  bc  

echo "obase=16;base=2;11001111"  |  bc  

# 同时转换2个数字
echo "obase=16;ibase=2;11001111;0101100111001111"  |  bc