本文是一个把二进制数转换为十进制数功能的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>
相关推荐
二进制转换为十进制,十进制转换为二进制,控制台应用程序
//十进制转二进制字符串 Console.WriteLine(Convert.ToString(d,2)); //输出: 1010 //十进制转十六进制字符串 Console.WriteLine(Convert.ToString(d,16)); //输出: a //二进制字符串转十进制数 string bin = "1010...
适用于将二进制数转换为十进制,A为十进制,B为二进制。{A,B}每次左移一位,判断A的每四位是否>4,若大于四则+3,否则保持不变;B为多少位二进制数则左移多少次。最终A是B转换成十进制的数。代码为32位二进制数转换...
整数部分法则:使用短除法,连续除2取余数,直到...例1:将十进制整数156转换成二进制数。 最后的结果就为红色箭头所指的由高位到低位:10011100 所以156转为为二进制的结果为10011100 例2:将十进制30转换为二进制
主要实现二进制和十进制的数字转换的源代码,void CharToHex(char * dest, char * buffer , int len)中实现了字母间的二进制转换
【基础算法】-python二进制与十进制的相互转换 # 二进制转换十进制方法一: def BtoD(n): d=0 power=0 while n>0: d+=2**power*(n%10) n//=10 power+=1 return d num=int(input('请输入一个二进制数字:')) ...
二进制与十进制转换PPT学习教案.pptx
用栈实现十进制转换成二进制(c语言)用栈实现十进制转换成二进制(c语言)用栈实现十进制转换成二进制(c语言)
二进制转换十进制 c语言 输入8位二进制数 输出十进制数
c++ 二进制转换十进制 double power(double x,int n) { double v=1; while(n--) { v=v*x; } return v; }
进制数转换二进制八进制十进制十六进制之间转换方法PPT学习教案.pptx
labview 十进制转换为二进制,比较简单的一种方法,还可以用在其他方面
十进制转二进制的方法与二进制转十进制的方法及八进制十六进制
本资源是一个Python编写的进制通用转换类,它提供了将...4、十六进制转十进制:除了从十进制转换到其他进制,该类还提供了将十六进制数转换为十进制数的功能。这对于处理来自外部源或用户输入的十六进制数据非常有用。
汇编语言各进制(二进制,八进制,十进制,十六进制)之间的转换,一网打尽,包括源码,word文档和PDF文档
php二进制转十进制,十进制转二进制算法 文件定义了两个转换函数,二进制转十进制函数,十进制转二进制函数,使用于一些特定需求的人,如有问题请私信我。
1、二进制与十进制的转换 1、二进制与十进制的转换 1、二进制与十进制的转换
解决labview字符串转换功能不足,将二进制字符串转变为十进制字符串。
进制转换器 二进制 八进制 十进制 十六进制
进制间转换 进制转换 二进制与十进制 八进制 十六进制转换