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

package org.lib.code;
005  
006 /**
007 * java String 与各种进制字符之间的转换
008 *
009
010 */
011 public class Coding {
012  
013     /**
014      * 字符串转换成十六进制值
015      * @param bin String 我们看到的要转换成十六进制的字符串
016      * @return
017      */
018     public static String bin2hex(String bin) {
019         char[] digital = "0123456789ABCDEF".toCharArray();
020         StringBuffer sb = new StringBuffer("");
021         byte[] bs = bin.getBytes();
022         int bit;
023         for (int i = 0; i < bs.length; i++) {
024             bit = (bs[i] & 0x0f0) >> 4;
025             sb.append(digital[bit]);
026             bit = bs[i] & 0x0f;
027             sb.append(digital[bit]);
028         }
029         return sb.toString();
030     }
031  
032     /**
033      * 十六进制转换字符串
034      * @param hex String 十六进制
035      * @return String 转换后的字符串
036      */
037     public static String hex2bin(String hex) {
038         String digital = "0123456789ABCDEF";
039         char[] hex2char = hex.toCharArray();
040         byte[] bytes = new byte[hex.length() / 2];
041         int temp;
042         for (int i = 0; i < bytes.length; i++) {
043             temp = digital.indexOf(hex2char[2 * i]) * 16;
044             temp += digital.indexOf(hex2char[2 * i + 1]);
045             bytes[i] = (byte) (temp & 0xff);
046         }
047         return new String(bytes);
048     }
049  
050     /**
051      * java字节码转字符串
052      * @param b
053      * @return
054      */
055     public static String byte2hex(byte[] b) { //一个字节的数,
056  
057         // 转成16进制字符串
058  
059         String hs = "";
060         String tmp = "";
061         for (int n = 0; n < b.length; n++) {
062             //整数转成十六进制表示
063  
064             tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
065             if (tmp.length() == 1) {
066                 hs = hs + "0" + tmp;
067             else {
068                 hs = hs + tmp;
069             }
070         }
071         tmp = null;
072         return hs.toUpperCase(); //转成大写
073  
074     }
075  
076     /**
077      * 字符串转java字节码
078      * @param b
079      * @return
080      */
081     public static byte[] hex2byte(byte[] b) {
082         if ((b.length % 2) != 0) {
083             throw new IllegalArgumentException("长度不是偶数");
084         }
085         byte[] b2 = new byte[b.length / 2];
086         for (int n = 0; n < b.length; n += 2) {
087             String item = new String(b, n, 2);
088             // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节
089  
090             b2[n / 2] = (byte) Integer.parseInt(item, 16);
091         }
092         b = null;
093         return b2;
094     }
095  
096     public static void main(String[] args) {
097         String content = "技术性问题EDF%&^%#_|~";
098         System.out.println(bin2hex(content));
099         System.out.println(hex2bin(bin2hex(content)));
100     }
101 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值