十六进制 与 二进制 的相互转换

问题描述:

  1.将二进制转换为十六进制。

  例如:100111010010110 ====》 4E96

  2.将十六进制转换为二进制。

  例如:4E96  ====》 100111010010110

解题思路1:

  利用二进制与十六进制之间的特殊关系进行转换,即一位十六进制的数可由四位二进制数表示。

  十六进制的每位数分别由  '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' 表示

  例如:“0110”    0*1 + 1*2 + 1* 4 +0*8 = 6 ===》 ‘6’

     “1111”    1*1 + 1*2 + 1* 4 +1*8 = 16 ===》 ‘F’

  因此,对一个二进制 串,可先取出其后四位,转为一位十六进制数。对剩下的部分以同样方法进行转换,直到该串只剩下最后四位,就转换完毕。

  若是最后串的长度不足四位且不为零时,在串的前面加‘0’补齐位数,再进行转换。

如图所示: 

 

        

 

 程序代码(二进制转十六进制):

public class W03152 {    
    static char[] c = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    
    static String bin_to_hex(String s){
        if(s.length()==0) return "";
        while(s.length()<4 && s.length()>0){
            s = '0' + s; 
        }
        if(s.length()==4){
            int a = (s.charAt(0)-'0')*8 + (s.charAt(1)-'0')*4
                    +(s.charAt(2)-'0')*2 + (s.charAt(3)-'0')*1;            
            return ""+c[a];
        }
        
        String s1 = bin_to_hex(s.substring(0,s.length()-4));
        String s2 = bin_to_hex(s.substring(s.length()-4,s.length()));
        
        return s1 + s2;
    }
    
    
    public static void main(String[] args) {
        System.out.println(bin_to_hex("100111010010110"));
        
    }

}

 解题思路2:

  对十六进制串中的每一位进行转换,每一位均可转换为四位二进制数

  例如: E === 》 1110

      5 === 》 0011

程序代码(十六进制转二进制)

public class W03152 {    
    static char[] c = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    
    //将一位十六进制数转为二进制串
    static String hex_to_bin(char x){
        String s2 ="";
        for(int j=0;j<c.length;j++){
            if(x==c[j]){
                int k = 3;
                while(k>=0){
                    if(j - (int)Math.pow(2, k) >= 0){
                        s2 = s2 + 1;
                        j -= (int)Math.pow(2, k);
                    }
                    else{
                        s2 = s2 + 0;
                    }
                    k--;
                }
                break;
            }                        
        }
        return s2;
    }
    //将十六进制串装换为二进制串
    static String hex_to_bin(String s){        
        if(s.length()==0) return "";
        
        if(s.length()==1)
            return hex_to_bin(s.charAt(0));
        
        return hex_to_bin(s.charAt(0)+"") + hex_to_bin(s.substring(1));
    }
    public static void main(String[] args) {
        System.out.println(hex_to_bin("4E96"));
        
    }

}    

 

转载于:https://www.cnblogs.com/wusq/p/6556374.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值