String与十六进制数互转

[java]  view plain copy print ?

  1. /**
  2. * 举个例子
  3. * 给你一串字符串  hexString = "%B:7,1$"
  4. * 需要把它转为16进制的 byte[]
  5. */
  6. public static void main(String[] args){
  7.  String hexString = "%B:7,1$";
  8.  byte[] data = toByteArray(hexString);
  9. //这个值就是 它对应的16进制值 {0x25,0x42,0x3A,0x37,0x2C,0x31,0x24}
  10. }
  11. /**
  12. * 反过来也一样
  13. */
  14. public static void main(String[] args){
  15.  byte[] data = {(byte)0x25 , (byte)0x42 , (byte)0x3A , (byte)0x31 , (byte)0x2C ,(byte)0x32 ,(byte)0x24};
  16.  String  str = hexStr2Str(byte2HexStr(data));
  17. //得到的 字符串 就是 "%B:7,1$"
  18. }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值