博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把十六进制的位串转化为byte数组
阅读量:6671 次
发布时间:2019-06-25

本文共 1462 字,大约阅读时间需要 4 分钟。

方式一:

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.       }  

 

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

 

转载地址:http://jimxo.baihongyu.com/

你可能感兴趣的文章
Dubbo深入分析之Cluster层
查看>>
分析Padavan源代码,二
查看>>
WordPress的WPML外挂出问题恐出现安全漏洞
查看>>
Django 调试技巧
查看>>
Spring Boot和thymeleaf , freemarker , jsp三个前端模块的运用
查看>>
phalcon-入门篇3(优美的URL与Config)
查看>>
单表60亿记录等大数据场景的MySQL优化和运维之道
查看>>
sql学习笔记
查看>>
maven编译时出现There are test failures
查看>>
SpringBoot | 第三十一章:MongoDB的集成和使用
查看>>
网络学习笔记2
查看>>
JPA--多对多关系
查看>>
配置sharepoint 2010错误:Microsoft.SharePoint.Upgrad...
查看>>
Windows04.CMap
查看>>
UUID 生成算法JS版
查看>>
JAVA中,Map转实体类、实体类转Map的方法
查看>>
判断dubbo接口是否正常
查看>>
100-19
查看>>
获取n!的末尾有多少个0?
查看>>
设计模式之工厂模式
查看>>