Java Hex 16进制的 byte String 转换类


  1. 转自:http://blog.csdn.net/hzbigdog/article/details/6877712

  2. package mobi.dzs.android.util;  
  3.   
  4. import java.util.Locale;  
  5.   
  6. /** 
  7.  * 16进制值与String/Byte之间的转换 
  8.  * @author JerryLi 
  9.  * @email lijian@dzs.mobi 
  10.  * @data 2011-10-16 
  11.  * */  
  12. public class CHexConver  
  13. {  
  14.     private final static char[] mChars = "0123456789ABCDEF".toCharArray();  
  15.     private final static String mHexStr = "0123456789ABCDEF";    
  16.     /**  
  17.      * 检查16进制字符串是否有效 
  18.      * @param sHex String 16进制字符串 
  19.      * @return boolean 
  20.      */    
  21.     public static boolean checkHexStr(String sHex){    
  22.         String sTmp = sHex.toString().trim().replace(" """).toUpperCase(Locale.US);  
  23.         int iLen = sTmp.length();  
  24.           
  25.         if (iLen > 1 && iLen%2 == 0){  
  26.             for(int i=0; i<iLen; i++)  
  27.                 if (!mHexStr.contains(sTmp.substring(i, i+1)))  
  28.                     return false;  
  29.             return true;  
  30.         }  
  31.         else  
  32.             return false;  
  33.     }  
  34.       
  35.     /**  
  36.      * 字符串转换成十六进制字符串 
  37.      * @param str String 待转换的ASCII字符串 
  38.      * @return String 每个Byte之间空格分隔,如: [61 6C 6B] 
  39.      */    
  40.     public static String str2HexStr(String str){    
  41.         StringBuilder sb = new StringBuilder();  
  42.         byte[] bs = str.getBytes();    
  43.           
  44.         for (int i = 0; i < bs.length; i++){    
  45.             sb.append(mChars[(bs[i] & 0xFF) >> 4]);    
  46.             sb.append(mChars[bs[i] & 0x0F]);  
  47.             sb.append(' ');  
  48.         }    
  49.         return sb.toString().trim();    
  50.     }  
  51.       
  52.     /**  
  53.      * 十六进制字符串转换成 ASCII字符串 
  54.      * @param str String Byte字符串 
  55.      * @return String 对应的字符串 
  56.      */    
  57.     public static String hexStr2Str(String hexStr){    
  58.         hexStr = hexStr.toString().trim().replace(" """).toUpperCase(Locale.US);  
  59.         char[] hexs = hexStr.toCharArray();    
  60.         byte[] bytes = new byte[hexStr.length() / 2];    
  61.         int iTmp = 0x00;;    
  62.   
  63.         for (int i = 0; i < bytes.length; i++){    
  64.             iTmp = mHexStr.indexOf(hexs[2 * i]) << 4;    
  65.             iTmp |= mHexStr.indexOf(hexs[2 * i + 1]);    
  66.             bytes[i] = (byte) (iTmp & 0xFF);    
  67.         }    
  68.         return new String(bytes);    
  69.     }  
  70.       
  71.     /** 
  72.      * bytes转换成十六进制字符串 
  73.      * @param b byte[] byte数组 
  74.      * @param iLen int 取前N位处理 N=iLen 
  75.      * @return String 每个Byte值之间空格分隔 
  76.      */  
  77.     public static String byte2HexStr(byte[] b, int iLen){  
  78.         StringBuilder sb = new StringBuilder();  
  79.         for (int n=0; n<iLen; n++){  
  80.             sb.append(mChars[(b[n] & 0xFF) >> 4]);  
  81.             sb.append(mChars[b[n] & 0x0F]);  
  82.             sb.append(' ');  
  83.         }  
  84.         return sb.toString().trim().toUpperCase(Locale.US);  
  85.     }  
  86.       
  87.     /** 
  88.      * bytes字符串转换为Byte值 
  89.      * @param src String Byte字符串,每个Byte之间没有分隔符(字符范围:0-9 A-F) 
  90.      * @return byte[] 
  91.      */  
  92.     public static byte[] hexStr2Bytes(String src){  
  93.         /*对输入值进行规范化整理*/  
  94.         src = src.trim().replace(" """).toUpperCase(Locale.US);  
  95.         //处理值初始化  
  96.         int m=0,n=0;  
  97.         int iLen=src.length()/2//计算长度  
  98.         byte[] ret = new byte[iLen]; //分配存储空间  
  99.           
  100.         for (int i = 0; i < iLen; i++){  
  101.             m=i*2+1;  
  102.             n=m+1;  
  103.             ret[i] = (byte)(Integer.decode("0x"+ src.substring(i*2, m) + src.substring(m,n)) & 0xFF);  
  104.         }  
  105.         return ret;  
  106.     }  
  107.   
  108.     /** 
  109.      * String的字符串转换成unicode的String 
  110.      * @param strText String 全角字符串 
  111.      * @return String 每个unicode之间无分隔符 
  112.      * @throws Exception 
  113.      */  
  114.     public static String strToUnicode(String strText)  
  115.         throws Exception  
  116.     {  
  117.         char c;  
  118.         StringBuilder str = new StringBuilder();  
  119.         int intAsc;  
  120.         String strHex;  
  121.         for (int i = 0; i < strText.length(); i++){  
  122.             c = strText.charAt(i);  
  123.             intAsc = (int) c;  
  124.             strHex = Integer.toHexString(intAsc);  
  125.             if (intAsc > 128)  
  126.                 str.append("\\u");  
  127.             else // 低位在前面补00  
  128.                 str.append("\\u00");  
  129.             str.append(strHex);  
  130.         }  
  131.         return str.toString();  
  132.     }  
  133.       
  134.     /** 
  135.      * unicode的String转换成String的字符串 
  136.      * @param hex String 16进制值字符串 (一个unicode为2byte) 
  137.      * @return String 全角字符串 
  138.      * @see CHexConver.unicodeToString("\\u0068\\u0065\\u006c\\u006c\\u006f") 
  139.      */  
  140.     public static String unicodeToString(String hex){  
  141.         int t = hex.length() / 6;  
  142.         int iTmp = 0;  
  143.         StringBuilder str = new StringBuilder();  
  144.         for (int i = 0; i < t; i++){  
  145.             String s = hex.substring(i * 6, (i + 1) * 6);  
  146.             // 将16进制的string转为int  
  147.             iTmp = (Integer.valueOf(s.substring(24), 16) << 8) | Integer.valueOf(s.substring(4), 16);  
  148.             // 将int转换为字符  
  149.             str.append(new String(Character.toChars(iTmp)));  
  150.         }  
  151.         return str.toString();  
  152.     }  
  153. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值