博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell进制转换
阅读量:7223 次
发布时间:2019-06-29

本文共 1118 字,大约阅读时间需要 3 分钟。

使用 Shell 运算进行进制转换

假定在您的脚本中有一些数字,您需要以另外的进制处理这些数字。使用 Shell 运算可以很容易地自动实现这类转换。一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:

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

 

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

$((BASE#NUMBER))

 

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

清单 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. 使用 bc 执行进制转换

$ bc -ql1010obase=1610Aibase=2102Control-D$

 

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

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

$ echo 'obase=16; 47' | bc2F$ echo 'obase=10; ibase=16; A03' | bc2563$

 

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

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

$ echo 'ibase=16; obase=10; A' | bcA$ echo 'ibase=16; obase=A; A' | bc10$

转载于:https://www.cnblogs.com/yuanyf/p/yuanyf.html

你可能感兴趣的文章
[转].NET 绘制 EAN13 (商品条码)
查看>>
【转】越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用
查看>>
开发者的利器:Docker 理解与使用
查看>>
mybatis调用视图和存储过程
查看>>
Nested loops、Hash join、Sort merge join(三种连接类型原理、使用要点)
查看>>
RT-Thread的线程(任务)处理 rt_thread_create/rt_thread_init区别
查看>>
为什么需要单元测试
查看>>
[原]shell中的三个零碎知识
查看>>
piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
查看>>
操作MSSQL服务还有测试是否连接
查看>>
vim命令拾遗[zz]
查看>>
简单PHP留言板之七 —— 附加上css样式表
查看>>
数据库开发篇(一)——转换日期类型
查看>>
php 燕十八 观察者模式代码例子
查看>>
利用Android Lost通过互联网或短信远程控制安卓设备
查看>>
用JvisualVM监视远程tomcat
查看>>
python基础 - 文件读写
查看>>
成大事必备9种能力、9种手段、9种心态
查看>>
php 依赖注入容器
查看>>
matlab设定mex接驳的C/C++编译器
查看>>