使用 Shell 运算进行进制转换 16进制转10进制

使用 Shell 运算进行进制转换

工作时候常常遇到一些问题,拿到的数字是16进制的,但是运算的时候是10进制的,shell可以很方便的处理这类的进制转换问题,一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:

$ echo $((013))
                        $ echo $((0xA4))
                                        

 

您还可以使用以下格式指定 2 到 64 之间的任意进制:

$((BASE#NUMBER))
                        

 

通过在 Shell 提示符后键入清单 7 中所示的行,尝试将二进制、八进制、十六进制以及其他进制的数转换为十进制。


清单 7. 在 Shell 中将任意进制的数以十进制输出

                     
                        echo $((2#1101010))
                        echo $((8#377))
                        echo $((16#D8))
                        echo $((12#10))
                        echo $((36#ZZYY))
                        

 

使用 bc 进行进制转换

在 Shell 中进行进制转换的另一个诀窍是使用 bc,它是一种任意精度运算语言,大多数 UNIX 安装程序都提供。因为它允许您指定输出进制,所以当您需要以十进制以外的进制输出时,这是一种很好的技术。

bc 的特殊变量 ibase 和 obase 分别包含用于输入和输出的进制的值。缺省情况下,都被设置为 10。要执行进制转换,需要改变其中的一个或两个值,然后提供一个数字。立即尝试,如清单 8 中所示。


清单 8. 使用 bc 执行进制转换

                     
                        $ bc -ql
                                            10
                        10
                        obase=16
                                            10
                        A
                        ibase=2
                                            10
                        2
                                                                          Control-D                                             
                        $
                        

 

要快速执行进制转换,可以联合使用 bc 和 echo形成快捷的单命令行程序,将给定的值通过管道传输给 bc。键入清单 9 中显示的内容。


清单 9. Shell 单命令行 bc 程序

                     
                        $ echo 'obase=16; 47' | bc
                        2F
                        $ echo 'obase=10; ibase=16; A03' | bc
                        2563
                        $
                        

 

警告:当您设置 bc 的输入进制以后,输入 bc 的所有数字都使用该进制,包括您提供用于设置输出进制的数字。因此最好先设置输出进制,否则可能会产生意想不到的结果,如清单 10 中所示。


清单 10. 设置输入和输出进制的先后顺序的重要性

                     
                        $ echo 'ibase=16; obase=10; A' | bc
                        A
                        $ echo 'ibase=16; obase=A; A' | bc
                        10
                        $

 

除了上面的所有方法 还有一种简单的方式是使用printf做进制转换,例:

a=`printf "%d"  0xef`

echo $a

>239



http://www.liyu8.com/article/91.htm

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值