`
java-mans
  • 浏览: 11487436 次
文章分类
社区版块
存档分类
最新评论

二进制到十进制的转换

 
阅读更多
本文是一个把二进制数转换为十进制数功能的shell脚本实例。这也是一个用expr命令进行数学运算的例子:
文件b2h.sh
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
echo "b2h -- convert binary to decimal"
echo "USAGE: b2h [-h] binarynum"
echo "OPTIONS: -h help text"
echo "EXAMPLE: b2h 111010 wiil be 58"
exit 0
}
error()
{
# print an error and exit
echo "$1"
exit 1
}
lastchar()
{
# return the last character of a string in $rval
if [-z"$1" ]; then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
# now cut out the last char
rval=`echo -n "$1" | cut -b $numofchar`
}
chop()
{
# remove the last character in string and return it in $rval
if [-z"$1" ]; then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
if [ "$numofchar" = "1" ]; then
# only one char in string
rval=""
return
fi
numofcharminus1=`expr $numofchar "-" 1`
# now cut all but the last char:
rval=`echo -n "$1" | cut -b 1-${numofcharminus1}`
}
while [-n"$1" ]; do
case $1 in
-h)help;shift 1;; # function help is called
-*)error"error: no such option $1. -h for help";;
*) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
lastchar "$binnum"
if [ "$rval" = "1" ]; then
sum=`expr "$weight" "+" "$sum"`
fi
# remove the last position in $binnum
chop "$binnum"
binnum="$rval"
weight=`expr "$weight" "*" 2`
done
echo "binary $binnumorig is decimal $sum"
该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制"10"可
以这样转换成十进制:
0 * 1 + 1 * 2 = 2
为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc –c计算字符个数,
然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。

rval=`echo -n "$1" | cut -b $numofchar`
这里cut的意思是提取位置$numofchar的这个字符,字符为位置是从1开始计算的
rval=`echo -n "$1" | cut -b 1-${numofcharminus1}`
这里cut的意思是提取从位置1位置${numofcharminus1}个字符,该语句是闭包含。字符位置是从1开始计算的。
另外,"shift 1"是把脚本文件传入参数编号起点从左向右移一位的意思。
<wbr style="line-height:25px"></wbr>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics