java中字符窜与16进制,byte之间的转换

来源:互联网 发布:专业软件开发学院 编辑:程序博客网 时间:2024/04/30 14:17
/**
* java String 与各种进制字符之间的转换
* @author
*/
 publicclass Coding {
  
    /**
     * 字符串转换成十六进制值
     * @param bin String 我们看到的要转换成十六进制的字符串
     * @return 
     */
    publicstatic String bin2hex(String bin) {
        char[] digital ="0123456789ABCDEF".toCharArray();
        StringBuffer sb =new StringBuffer("");
        byte[] bs = bin.getBytes();
        intbit;
        for(int i = 0; i < bs.length; i++) {
            bit = (bs[i] &0x0f0) >> 4;
            sb.append(digital[bit]);
            bit = bs[i] &0x0f;
            sb.append(digital[bit]);
        }
        returnsb.toString();
    }
  
    /**
     * 十六进制转换字符串
     * @param hex String 十六进制
     * @return String 转换后的字符串
     */
    publicstatic String hex2bin(String hex) {
        String digital ="0123456789ABCDEF";
        char[] hex2char = hex.toCharArray();
        byte[] bytes =new byte[hex.length() /2];
        inttemp;
        for(int i = 0; i < bytes.length; i++) {
            temp = digital.indexOf(hex2char[2* i]) * 16;
            temp += digital.indexOf(hex2char[2* i + 1]);
            bytes[i] = (byte) (temp &0xff);
        }
        returnnew String(bytes);
    }
  
    /** 
     * java字节码转字符串 
     * @param b 
     * @return 
     */
    publicstatic String byte2hex(byte[] b) {//一个字节的数,
        // 转成16进制字符串
        String hs ="";
        String tmp ="";
        for(int n = 0; n < b.length; n++) {
            //整数转成十六进制表示
            tmp = (java.lang.Integer.toHexString(b[n] &0XFF));
            if(tmp.length() == 1) {
                hs = hs +"0" + tmp;
            }else {
                hs = hs + tmp;
            }
        }
        tmp =null;
        returnhs.toUpperCase(); //转成大写
    }
  
    /**
     * 字符串转java字节码
     * @param b
     * @return
     */
    publicstatic byte[] hex2byte(byte[] b) {
        if((b.length % 2) !=0) {
            thrownew IllegalArgumentException("长度不是偶数");
        }
        byte[] b2 =new byte[b.length /2];
        for(int n = 0; n < b.length; n +=2) {
            String item =new String(b, n,2);
            // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节
            b2[n /2] = (byte) Integer.parseInt(item,16);
        }
        b =null;
        returnb2;
    }
  
    publicstatic void main(String[] args) {
        String content ="EDF%&^%#_|~";
        System.out.println(bin2hex(content));
        System.out.println(hex2bin(bin2hex(content)));
    }
}
0 0
原创粉丝点击