Java中byte与16进制字符串的互相转换

来源:互联网 发布:网络布局要看什么书籍 编辑:程序博客网 时间:2024/06/06 20:48

转自 http://blog.csdn.net/redhat456/article/details/4492310

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(2+ 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。

    同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。

    根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。

 

 

[java] view plain copy
 print?
  1. /** 
  2.  * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 
  3.  * @param src byte[] data 
  4.  * @return hex string 
  5.  */     
  6. public static String bytesToHexString(byte[] src){  
  7.     StringBuilder stringBuilder = new StringBuilder("");  
  8.     if (src == null || src.length <= 0) {  
  9.         return null;  
  10.     }  
  11.     for (int i = 0; i < src.length; i++) {  
  12.         int v = src[i] & 0xFF;  
  13.         String hv = Integer.toHexString(v);  
  14.         if (hv.length() < 2) {  
  15.             stringBuilder.append(0);  
  16.         }  
  17.         stringBuilder.append(hv);  
  18.     }  
  19.     return stringBuilder.toString();  
  20. }  
  21. /** 
  22.  * Convert hex string to byte[] 
  23.  * @param hexString the hex string 
  24.  * @return byte[] 
  25.  */  
  26. public static byte[] hexStringToBytes(String hexString) {  
  27.     if (hexString == null || hexString.equals("")) {  
  28.         return null;  
  29.     }  
  30.     hexString = hexString.toUpperCase();  
  31.     int length = hexString.length() / 2;  
  32.     char[] hexChars = hexString.toCharArray();  
  33.     byte[] d = new byte[length];  
  34.     for (int i = 0; i < length; i++) {  
  35.         int pos = i * 2;  
  36.         d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));  
  37.     }  
  38.     return d;  
  39. }  
  40. /** 
  41.  * Convert char to byte 
  42.  * @param c char 
  43.  * @return byte 
  44.  */  
  45.  private byte charToByte(char c) {  
  46.     return (byte"0123456789ABCDEF".indexOf(c);  
  47. }  

 

备注: 关于代码中第12行 int v = src[i] & 0xFF; 如有疑问,可以查看:java中byte转换int时为何与0xff进行与运算



0 0
原创粉丝点击