把十六进制的位串转化为byte数组

简介:

方式一:

Java代码   收藏代码
  1. /**  
  2.      * Convert hex string to byte[]  
  3.      * @param hexString the hex string  
  4.      * @return byte[]  
  5.      */    
  6.     public static byte[] hexStringToBytes(String hexString) {    
  7.         if (hexString == null || hexString.equals("")) {    
  8.             return null;    
  9.         }    
  10.  if(hexString.length()%2!=0){    
  11.             throw new RuntimeException("Hex  bit string length must be even");    
  12.         }   
  13.         hexString = hexString.toUpperCase();    
  14.         int length = hexString.length() / 2;    
  15.         char[] hexChars = hexString.toCharArray();    
  16.         byte[] d = new byte[length];    
  17.         for (int i = 0; i < length; i++) {    
  18.             int pos = i * 2;    
  19.             d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));    
  20.         }    
  21.         return d;    
  22.     }    
  23. /** 
  24.      * Convert char to byte 
  25.      * 'F'-->15 
  26.      * @param c 
  27.      *            char 
  28.      * @return byte 
  29.      */  
  30.     private static byte charToByte(char c) {  
  31.         int index = "0123456789ABCDEF".indexOf(c);  
  32.         if (index == -1) {  
  33.             index = "0123456789abcdef".indexOf(c);  
  34.         }  
  35.         return (byte) index;  
  36.     }  

 

方式二:

Java代码   收藏代码
  1. // 从十六进制字符串到字节数组转换  
  2.      public static byte[] hexString2Bytes(String hexstr) {  
  3.         int length=hexstr.length();  
  4.         if(length%2!=0){  
  5.             throw new RuntimeException("Hex  bit string length must be even");  
  6.         }  
  7.         byte[] b = new byte[hexstr.length() / 2];  
  8.         int j = 0;  
  9.         for (int i = 0; i < b.length; i++) {  
  10.             char c0 = hexstr.charAt(j++);  
  11.             char c1 = hexstr.charAt(j++);  
  12.             b[i] = (byte) ((parse(c0) << 4) | parse(c1));  
  13.         }  
  14.         return b;  
  15.     }  
  16.         
  17.       private static int parse(char c) {  
  18.           if (c >= 'a')  
  19.            return (c - 'a' + 10) & 0x0f;  
  20.           if (c >= 'A')  
  21.            return (c - 'A' + 10) & 0x0f;  
  22.           return (c - '0') & 0x0f;  
  23.       }  

 

 注意:当十六进制位串转化为字节数组时,十六进制位串的位数必须是偶数的,因为两个十六进制位串对应一个字节

 

相关文章
|
7月前
|
Cloud Native Java Go
execl文件中有多个sheet,并且每个sheet以byte数组存在数据库中,现在要把数据库中把execl导出来?
execl文件中有多个sheet,并且每个sheet以byte数组存在数据库中,现在要把数据库中把execl导出来?
34 0
|
8月前
|
JavaScript
js中将byte数组转换成base64图片显示
js中将byte数组转换成base64图片显示
|
9月前
|
存储
位(bit) \字节(byte)\十六进制
位(bit) \字节(byte)\十六进制
|
11月前
将BufferedImage转为byte[]数组,亲测可用
将BufferedImage转为byte[]数组,亲测可用
133 0
|
Python
C的byte数组在python中的处理
C的byte数组在python中的处理
70 0
|
Java
Java中两个或多个byte数组合并及int类型转数组
Java中两个或多个byte数组合并及int类型转数组
381 0
|
Java BI
JAVA中将byte[]数组转成16进制字符串
方法一: /** * byte数组转化为16进制字符串 * @param bytes * @return */ public static String byteToHexString(byte[] bytes) { Str...
1539 0