Shell 二进制转换成十六进制的方案

提问: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

执行结果如下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值