1. package mobi.dzs.util; 
  2.  
  3. /** 
  4.  * 16进制值与String/Byte之间的转换 
  5.  * @author JerryLi 
  6.  * @email lijian@dzs.mobi 
  7.  * @data 2011-10-16 
  8.  * */ 
  9. public class CHexConver 
  10.     /**  
  11.      * 字符串转换成十六进制字符串 
  12.      * @param String str 待转换的ASCII字符串 
  13.      * @return String 每个Byte之间空格分隔,如: [61 6C 6B] 
  14.      */   
  15.     public static String str2HexStr(String str) 
  16.     {   
  17.  
  18.         char[] chars = "0123456789ABCDEF".toCharArray();   
  19.         StringBuilder sb = new StringBuilder(""); 
  20.         byte[] bs = str.getBytes();   
  21.         int bit;   
  22.          
  23.         for (int i = 0; i < bs.length; i++) 
  24.         {   
  25.             bit = (bs[i] & 0x0f0) >> 4;   
  26.             sb.append(chars[bit]);   
  27.             bit = bs[i] & 0x0f;   
  28.             sb.append(chars[bit]); 
  29.             sb.append(' '); 
  30.         }   
  31.         return sb.toString().trim();   
  32.     } 
  33.      
  34.     /**  
  35.      * 十六进制转换字符串 
  36.      * @param String str Byte字符串(Byte之间无分隔符 如:[616C6B]) 
  37.      * @return String 对应的字符串 
  38.      */   
  39.     public static String hexStr2Str(String hexStr) 
  40.     {   
  41.         String str = "0123456789ABCDEF";   
  42.         char[] hexs = hexStr.toCharArray();   
  43.         byte[] bytes = new byte[hexStr.length() / 2];   
  44.         int n;   
  45.  
  46.         for (int i = 0; i < bytes.length; i++) 
  47.         {   
  48.             n = str.indexOf(hexs[2 * i]) * 16;   
  49.             n += str.indexOf(hexs[2 * i + 1]);   
  50.             bytes[i] = (byte) (n & 0xff);   
  51.         }   
  52.         return new String(bytes);   
  53.     } 
  54.      
  55.     /** 
  56.      * bytes转换成十六进制字符串 
  57.      * @param byte[] b byte数组 
  58.      * @return String 每个Byte值之间空格分隔 
  59.      */ 
  60.     public static String byte2HexStr(byte[] b) 
  61.     { 
  62.         String stmp=""
  63.         StringBuilder sb = new StringBuilder(""); 
  64.         for (int n=0;n<b.length;n++) 
  65.         { 
  66.             stmp = Integer.toHexString(b[n] & 0xFF); 
  67.             sb.append((stmp.length()==1)? "0"+stmp : stmp); 
  68.             sb.append(" "); 
  69.         } 
  70.         return sb.toString().toUpperCase().trim(); 
  71.     } 
  72.      
  73.     /** 
  74.      * bytes字符串转换为Byte值 
  75.      * @param String src Byte字符串,每个Byte之间没有分隔符 
  76.      * @return byte[] 
  77.      */ 
  78.     public static byte[] hexStr2Bytes(String src) 
  79.     { 
  80.         int m=0,n=0
  81.         int l=src.length()/2
  82.         System.out.println(l); 
  83.         byte[] ret = new byte[l]; 
  84.         for (int i = 0; i < l; i++) 
  85.         { 
  86.             m=i*2+1
  87.             n=m+1
  88.             ret[i] = Byte.decode("0x" + src.substring(i*2, m) + src.substring(m,n)); 
  89.         } 
  90.         return ret; 
  91.     } 
  92.  
  93.     /** 
  94.      * String的字符串转换成unicode的String 
  95.      * @param String strText 全角字符串 
  96.      * @return String 每个unicode之间无分隔符 
  97.      * @throws Exception 
  98.      */ 
  99.     public static String strToUnicode(String strText) 
  100.         throws Exception 
  101.     { 
  102.         char c; 
  103.         StringBuilder str = new StringBuilder(); 
  104.         int intAsc; 
  105.         String strHex; 
  106.         for (int i = 0; i < strText.length(); i++) 
  107.         { 
  108.             c = strText.charAt(i); 
  109.             intAsc = (int) c; 
  110.             strHex = Integer.toHexString(intAsc); 
  111.             if (intAsc > 128
  112.                 str.append("\\u" + strHex); 
  113.             else // 低位在前面补00 
  114.                 str.append("\\u00" + strHex); 
  115.         } 
  116.         return str.toString(); 
  117.     } 
  118.      
  119.     /** 
  120.      * unicode的String转换成String的字符串 
  121.      * @param String hex 16进制值字符串 (一个unicode为2byte) 
  122.      * @return String 全角字符串 
  123.      */ 
  124.     public static String unicodeToString(String hex) 
  125.     { 
  126.         int t = hex.length() / 6
  127.         StringBuilder str = new StringBuilder(); 
  128.         for (int i = 0; i < t; i++) 
  129.         { 
  130.             String s = hex.substring(i * 6, (i + 1) * 6); 
  131.             // 高位需要补上00再转 
  132.             String s1 = s.substring(24) + "00"
  133.             // 低位直接转 
  134.             String s2 = s.substring(4); 
  135.             // 将16进制的string转为int 
  136.             int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16); 
  137.             // 将int转换为字符 
  138.             char[] chars = Character.toChars(n); 
  139.             str.append(new String(chars)); 
  140.         } 
  141.         return str.toString(); 
  142.     }