十进制转二进制脚本
时间:2009-04-02 来源:sss0213
寂寞烈火
[原创?]shell版十进制转二进制脚本
[code]
#!/bin/bash
#
Usage(){
echo "Error!!!"
exit 1
}
num=$1
m=0
while ((m<${#num}));do
[[ ${num:$m:1} = [0-9] ]] || Usage
((m++))
done
[[ $# -ne 1 || $1 == 0* ]] && Usage
bin=$(
while ((num!=0));do
b=$((num%2))
echo -n $b
num=$((num/2))
done
)
echo -n $1\'s BinCode is:
n=${#bin}
while ((n>=0));do
echo -n ${bin:$n:1}
((n--))
done
echo
echo Convert Finish![/code]
请大家测试
[code]
#!/bin/bash
#
Usage(){
echo "Error!!!"
exit 1
}
num=$1
m=0
while ((m<${#num}));do
[[ ${num:$m:1} = [0-9] ]] || Usage
((m++))
done
[[ $# -ne 1 || $1 == 0* ]] && Usage
bin=$(
while ((num!=0));do
b=$((num%2))
echo -n $b
num=$((num/2))
done
)
echo -n $1\'s BinCode is:
n=${#bin}
while ((n>=0));do
echo -n ${bin:$n:1}
((n--))
done
echo
echo Convert Finish![/code]
请大家测试
2008-4-2 00:04 Shell_HAT
works fine from my side:
$ ./a.sh 10
10's BinCode is:1010
Convert Finish!
$ ./a.sh 10
10's BinCode is:1010
Convert Finish!
2008-4-2 00:30 網中人
echo "obase=2;10" | bc
2008-4-2 00:45 sieur
楼主,我正在写一个处理IP的脚本,其中一个处理十进制转二进制的函数,还没修改,顺便测试:
89 function dec2bin() {
90 local -r ip="$1"
91 local sec2=
92 local pos=
93 ip2=
94
95 for sec in `echo $ip | awk -F'.' '{print $1, $2, $3, $4}'`; do
96 sec2='00000000'
97 pos=7
98 while (( sec/2 )); do
99 (( sec%2 )) && {
100 sec2=`echo $sec2 | sed -e 's@\(.\{'$pos'\}\).\(.*\)@\11\2@'`
101 }
102 (( --pos ))
103 (( sec /= 2 ))
104 done
105 [ $sec ] && sec2=`echo $sec2 | sed -e 's@\(.\{'$pos'\}\).\(.*\)@\11\2@'`
106 ip2=`echo $ip2 | sed -e 's@$@.'$sec2'@'`
107 done
108 ip2=`echo $ip2 | sed -e 's@^.@@'`
109 }
89 function dec2bin() {
90 local -r ip="$1"
91 local sec2=
92 local pos=
93 ip2=
94
95 for sec in `echo $ip | awk -F'.' '{print $1, $2, $3, $4}'`; do
96 sec2='00000000'
97 pos=7
98 while (( sec/2 )); do
99 (( sec%2 )) && {
100 sec2=`echo $sec2 | sed -e 's@\(.\{'$pos'\}\).\(.*\)@\11\2@'`
101 }
102 (( --pos ))
103 (( sec /= 2 ))
104 done
105 [ $sec ] && sec2=`echo $sec2 | sed -e 's@\(.\{'$pos'\}\).\(.*\)@\11\2@'`
106 ip2=`echo $ip2 | sed -e 's@$@.'$sec2'@'`
107 done
108 ip2=`echo $ip2 | sed -e 's@^.@@'`
109 }
2008-4-2 10:52 xinyv
网老大又出来砟人了,不过烈火写的纯 bash 脚本还是很强的。
学习了。
学习了。
2008-4-2 11:04 FinalBSD
[quote]原帖由 [i]網中人[/i] 于 2008-4-2 00:30 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8157583&ptid=1074000][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
echo "obase=2;10" | bc [/quote]
我也想说这个。:em21: :em21: :em21: 简单才是美嘛
echo "obase=2;10" | bc [/quote]
我也想说这个。:em21: :em21: :em21: 简单才是美嘛
2008-4-2 11:17 xinyv
烈火那个是纯bash的,你没安装bc咋办?
[code]
#!/bin/sh
[ -z $1 ] && { echo "Error!!!";exit 1; }
function Usage(){
for ((i=${#_M[@]};i>0;i--));do
echo -n ${_M[$i]}
done
echo ${_M[0]}
exit 0
}
_T=$1;_N=0
function expr2(){
[ ${_T} -lt 2 ] && { _M[${_N}]=${_T};Usage; }
_M[${_N}]=$((${_T}%2));((_N++))
_T=$((${_T}/2))
expr2 ${_T}
}
expr2 ${_T}
[/code]
起起哄刚学习,写了一个。
[code]
#!/bin/sh
[ -z $1 ] && { echo "Error!!!";exit 1; }
function Usage(){
for ((i=${#_M[@]};i>0;i--));do
echo -n ${_M[$i]}
done
echo ${_M[0]}
exit 0
}
_T=$1;_N=0
function expr2(){
[ ${_T} -lt 2 ] && { _M[${_N}]=${_T};Usage; }
_M[${_N}]=$((${_T}%2));((_N++))
_T=$((${_T}/2))
expr2 ${_T}
}
expr2 ${_T}
[/code]
起起哄刚学习,写了一个。
2008-4-2 16:54 zhengwei_zw
请楼主解释下算法那些吧。我等菜鸟看不明白啊
2008-4-2 22:58 Shell_HAT
[quote]原帖由 [i]網中人[/i] 于 2008-4-2 00:30 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8157583&ptid=1074000][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
echo "obase=2;10" | bc [/quote]
$ echo "obase=2;10" | bc
bash: bc: command not found
明天到公司找台 Unix server 试试
echo "obase=2;10" | bc [/quote]
$ echo "obase=2;10" | bc
bash: bc: command not found
明天到公司找台 Unix server 试试
2008-4-2 23:56 寂寞烈火
[quote]原帖由 [i]zhengwei_zw[/i] 于 2008-4-2 16:54 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8162387&ptid=1074000][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
请楼主解释下算法那些吧。我等菜鸟看不明白啊 [/quote]
十进制转二进制的算法很简单
用2相除至结果为1 , 将余数和最后的1从下向上倒序写 就是结果
网上有的是各种转换的方法
请楼主解释下算法那些吧。我等菜鸟看不明白啊 [/quote]
十进制转二进制的算法很简单
用2相除至结果为1 , 将余数和最后的1从下向上倒序写 就是结果
网上有的是各种转换的方法
2008-4-10 08:03 7717060
我也来支持一下
2008-10-16 20:09 prc
[code]
#/bin/bash
array=( 0000 0001 0010 0011
0100 0101 0110 0111
1000 1001 1010 1011
1100 1101 1110 1111)
function _oct2bin()
{
echo -n ${array["0x$1"]}
}
function oct2bin()
{
local str i len
str=$(printf "%x" $1)
len=${#str}
for((i=0;i<len;i++))
{
_oct2bin ${str:$i:1}
}
}
oct2bin $1
[/code]
#/bin/bash
array=( 0000 0001 0010 0011
0100 0101 0110 0111
1000 1001 1010 1011
1100 1101 1110 1111)
function _oct2bin()
{
echo -n ${array["0x$1"]}
}
function oct2bin()
{
local str i len
str=$(printf "%x" $1)
len=${#str}
for((i=0;i<len;i++))
{
_oct2bin ${str:$i:1}
}
}
oct2bin $1
[/code]
2008-10-16 21:06 lseeo
回复 #12 prc 的帖子
很酷.
printf "%x" $1 是转换成16进制吗? 没有直接转成2进制的表示吗?
最好再加上参数判断~
很酷.
printf "%x" $1 是转换成16进制吗? 没有直接转成2进制的表示吗?
最好再加上参数判断~
2008-10-17 09:59 prc
[quote]原帖由 [i]lseeo[/i] 于 2008-10-16 21:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=9458468&ptid=1074000][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
很酷.
printf "%x" $1 是转换成16进制吗? 没有直接转成2进制的表示吗?
最好再加上参数判断~ [/quote]
printf不支持二进制输出,只支持八进制和十六进制
很酷.
printf "%x" $1 是转换成16进制吗? 没有直接转成2进制的表示吗?
最好再加上参数判断~ [/quote]
printf不支持二进制输出,只支持八进制和十六进制
相关阅读 更多 +