进制转换函数linux,Linux进制转换

本文介绍了如何在Shell中进行进制转换,包括使用内置的算术运算、`bc`命令以及`printf`格式化参数。此外,还展示了如何编写一个自定义的Shell脚本来实现任意进制间的转换,该脚本接受输入和输出进制作为参数,并处理多个数字的转换。这对于日常的系统管理和问题排查非常实用。
摘要由CSDN通过智能技术生成

经常涉及到进制的转换,比如线上处理问题时候经常需要转换线程id到16进制.

1.进制转换

2.1.shell运算

Shell 运算把一个数字从给定的进制转换位十进制.如果数字以运算展开式的形式提供,那么假定它带有十进制符号,除非 它前面带有 0(这种情况假定是八进制)或 0x(这种情况假定是十六进制)

xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((010))8xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((0x10))16

也可以指定 2 到 64 之间的任意进制,超过64进制则不支持.格式如下:

$((BASE#NUMBER))

使用举例如下:

xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((2#10))2xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((5#10))5xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((8#10))8xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((10#10))10xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((16#10))16xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((64#10))64xiaobaoqiu@xiaobaoqiu:~/myshell$ echo $((100#10))bash: 100#10: 无效的算数进制 (错误符号是 "100#10")

2.2.bc

bc是一种任意精度运算语言,大多数 UNIX/Linux 安装程序都提供.因为它允许您指定输出进制,所以当您需要以十进制以外的进制输出时,这是一种很好的技术.

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

xiaobaoqiu@xiaobaoqiu:~/myshell$ echo 'obase=16; 10' | bcAxiaobaoqiu@xiaobaoqiu:~/myshell$ echo 'obase=16; ibase=10; 10' | bcAxiaobaoqiu@xiaobaoqiu:~/myshell$ echo 'obase=10; ibase=16; 10' | bc16

2.3.printf

格式化参数和C语言的格式一致:

xiaobaoqiu@xiaobaoqiu:~/myshell$ printf "%X\n" 10064xiaobaoqiu@xiaobaoqiu:~/myshell$ printf "%d\n" 0x1016

2.自定义shell

自己写一个shell,处理多个输入,任意进制到任意进制的转换.通过这个脚本,学习了一下shell处理option的方式.

原理很简单,就是利用上面说道的bc命令.shell脚本如下:

#!/bin/bashwhile getopts :i:o: optdocase "$opt" ini) #输入的参数的进制#echo "Found the -i option,with vale $OPTARG"ibase=$OPTARG;;o) #输出参数进制#echo "Found the -o option,with vale $OPTARG"obase=$OPTARG;;*) #当有不认识的选项的时候arg为?echo "unkonw argument, Usage : "echo "$1 -i 10 -o 16 1 2 3 4 5 6 ..."exit 1esacdone#跳过opt参数shift $[$OPTIND - 1]#参数检验if [ ! $ibase ]; thenecho "Usage : $0 -i 10 -o 16 1 2 3 4 5 6 ..."exit 1fiif [ ! $obase ]; thenecho "Usage : $0 -i 10 -o 16 1 2 3 4 5 6 ..."exit 1fiecho "输入进制:$ibase"echo "输出进制:$obase"#执行进制转换for i in $@doecho "obase=$obase; ibase=$ibase; $i" |bcdone

1.bc

2.bc

简单使用如下:

xiaobaoqiu@xiaobaoqiu:~/myshell$ ./trans -i 10 -o 16 100输入进制:10输出进制:1664

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值