使用 Shell 运算进行进制转换 16进制转10进制
2014-03-11 10:59
531 查看
使用 Shell 运算进行进制转换
工作时候常常遇到一些问题,拿到的数字是16进制的,但是运算的时候是10进制的,shell可以很方便的处理这类的进制转换问题,一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:
您还可以使用以下格式指定 2 到 64 之间的任意进制:
通过在 Shell 提示符后键入清单 7 中所示的行,尝试将二进制、八进制、十六进制以及其他进制的数转换为十进制。
清单 7. 在 Shell 中将任意进制的数以十进制输出
使用 bc 进行进制转换
在 Shell 中进行进制转换的另一个诀窍是使用
8 中所示。
清单 8. 使用 bc 执行进制转换
要快速执行进制转换,可以联合使用
9 中显示的内容。
清单 9. Shell 单命令行 bc 程序
警告:当您设置
10 中所示。
清单 10. 设置输入和输出进制的先后顺序的重要性
除了上面的所有方法 还有一种简单的方式是使用printf做进制转换,例:
a=`printf "%d" 0xef`
echo $a
>239
http://www.liyu8.com/article/91.htm
工作时候常常遇到一些问题,拿到的数字是16进制的,但是运算的时候是10进制的,shell可以很方便的处理这类的进制转换问题,一种情况是使用 Shell 运算把一个数字从给定的进制转换位十进制。如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)。键入以下内容以得到一些八进制和十六进制值的十进制输出:
$ echo $((013)) $ echo $((0xA4)) |
$((BASE#NUMBER)) |
清单 7. 在 Shell 中将任意进制的数以十进制输出
echo $((2#1101010)) echo $((8#377)) echo $((16#D8)) echo $((12#10)) echo $((36#ZZYY)) |
在 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 $ |
a=`printf "%d" 0xef`
echo $a
>239
http://www.liyu8.com/article/91.htm
相关文章推荐
- 在shell中如何把10进制字符转换成16进制形式输出?
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- 用sql server进行10进制和16进制的转换 hextoint inttohex
- GNU Linux shell中如何进行各进制编码间(二进制、8进制、16进制、base64)的转换
- 【汇编】16进制转换成10进制(三种方法)
- java 10进制和16进制的相互转换
- java 10进制与16进制的转换
- java之10进制转换2,8,16进制
- java中进行2、8、16、10进制之间的转换
- Shell脚本攻略03-使用shell进行数学运算
- 16进制、10进制、BCD码之间的转换
- c# 2进制、8进制、10进制、16进制之间的转换
- 使用链栈来对十进制数进行任意进制的转换
- C语言学习3-1:成绩检测,使用while和do...while得到九九乘法,1-1/2+1/3-1/4 .......+1/10求和,输入10进制打印2进制,求素数,猜随机产生的数字,16进制转二进制,
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- 16进制字符串转换成10进制数据
- JAVA进行进制转换,10进制转换为其他进制
- 16进制、10进制、字符串、中文、byte[]相互转换--->java版
- 【原】VC++ 中实现进制2进制,10进制,16进制的相互转换