提问:100101011001010101000111100101 转换成十六进制数是多少?
代码如下:
#!/bin/bash
bin2Hex(){
local bin=$1
if [[ -z $bin ]]; then
echo "字符串为空"
exit
fi
for i in `seq 1 ${#bin}`
do
local bitvalue=`echo $bin |cut -c $i`
if ! [[ $bitvalue == [01] ]];then
echo "字符串格式错误!"
exit
fi
done
local remainder=`expr ${#bin} % 4`
if [[ $remainder == 1 ]];then
local bin="000$bin"
elif [[ $remainder == 2 ]];then
local bin="00$bin"
elif [[ $remainder == 3 ]];then
local bin="0$bin"
fi
start=1
end=4
local hexvalues=""
local seqnum=`expr ${#bin} / 4`
for i in `seq 1 $seqnum`
do
local bits=`echo $bin |cut -c $start-$end`
local bit1=`echo $bits |cut -c 1`
[[ $bit1 = 1 ]] && bit1value=8 || bit1value=0
local bit2=`echo $bits |cut -c 2`
[[ $bit2 = 1 ]] && bit2value=4 || bit2value=0
local bit3=`echo $bits |cut -c 3`
[[ $bit3 = 1 ]] && bit3value=2 || bit3value=0
local bit4=`echo $bits |cut -c 4`
[[ $bit4 = 1 ]] && bit4value=1 || bit4value=0
local hexvalue=`printf %x $((${bit1value}+${bit2value}+${bit3value}+${bit4value}))`
local hexvalues="$hexvalues$hexvalue"
start=$((start+4))
end=$((end+4))
done
#echo $hexvalues
local num=`expr ${#hexvalues} % 2`
local hexseqnum=`expr ${#hexvalues} / 2`
if [[ $num == 1 ]];then
local hexvalues="0$hexvalues"
local hexseqnum=`expr $hexseqnum + 1`
fi
local hexstart=1
local hexend=2
local hexsums=""
for i in `seq 1 $hexseqnum`
do
local hexsum=`echo $hexvalues |cut -c $hexstart-$hexend`
local hexsums="${hexsums}0x${hexsum} "
hexstart=$((hexstart+2))
hexend=$((hexend+2))
done
echo $hexsums
}
bin2Hex $1
执行结果如下