把十六进制的位串转化为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.       }  

 

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

 

相关文章
|
Cloud Native Java Go
execl文件中有多个sheet,并且每个sheet以byte数组存在数据库中,现在要把数据库中把execl导出来?
execl文件中有多个sheet,并且每个sheet以byte数组存在数据库中,现在要把数据库中把execl导出来?
67 0
|
4月前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
98 5
|
5月前
MAC 转 Byte[] 数组
MAC 转 Byte[] 数组
58 0
|
6月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
121 0
|
6月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
136 0
|
8月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何将Oracle中的BLOB数据类型转换为byte数组
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
JavaScript
js中将byte数组转换成base64图片显示
js中将byte数组转换成base64图片显示
将BufferedImage转为byte[]数组,亲测可用
将BufferedImage转为byte[]数组,亲测可用
286 0
|
Python
C的byte数组在python中的处理
C的byte数组在python中的处理
104 0