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

 

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

 

时间: 2024-08-01 19:45:46

把十六进制的位串转化为byte数组的相关文章

请教C#与VC6之间利用UDP/TCP进行数据传输时,如何实现BYTE数组与自定义数据结构或类的相互转换?

问题描述 请教C#下如何实现自定义结构或类与BYTE数组之间的相互转换(即数据的打包与解包)?在C#定义类似如下的结构和类:[Serializable][StructLayout(LayoutKind.Sequential,Pack=1)]publicstructSTCord{publicdoublex;//publicdoubley;publicbytetype;publicintnum;};[Serializable][StructLayout(LayoutKind.Sequential,P

string-c++中怎么将本地图片转化成java需要的byte数组

问题描述 c++中怎么将本地图片转化成java需要的byte数组 c++调用java写的webservice时,需要传入一个本地图片转化为byte数组的数据,求大神给讲一下. 这是java写的webservice接口方法. public String verifyFaceSingle(String deviceId,byte[] leftImage,byte[] rightImage); 现在需要在vs2010里面获取byte[] leftImage. Serializer->StartElem

跪求C#下如何实现自定义结构或类与BYTE数组之间的相互转换(即数据的打包与解包)?

问题描述 请教C#下如何实现自定义结构或类与BYTE数组之间的相互转换(即数据的打包与解包)?在C#定义类似如下的结构和类:[Serializable][StructLayout(LayoutKind.Sequential,Pack=1)]publicstructSTCord{publicdoublex;//publicdoubley;publicbytetype;publicintnum;};[Serializable][StructLayout(LayoutKind.Sequential,P

C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。

原文:C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name="original"> 源图像. </param> /// <returns> 8位灰度图像. </returns> public static Bitmap RgbToGrayScale(Bitmap o

java中byte数组与十六进制字符串相互转换

最近在做加密算法的研究和使用,经常会用到byte数组和十六进制字符串的转换.之前对于此类问题我一般都是使用BigInteger这个类转换一下算了,这样为了看输出不是乱码.这其实都不是根本上的解决方案. 最简单的转换方法: /** * @see 将byte[]数组转换为String字符串 * @author Herman.Xiong * @date 2014年5月5日 17:15:42 * @param data byte数组 * @return String 转换后的字符串 */ public

数据结构基本概念和术语之位字节、字、位串、元素等_应用技巧

数据结构基本概念和术语:位.字节.字.位串.元素.数据域.物理结构.逻辑结构  位(Bit):"位(bit)"是电子计算机中最小的数据单位.每一位的状态只能是0或1.  字节(Byte):8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位.1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间.  字:"字"由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长.例如一台8位机,它的1个字就等

将Byte数组转化为String

数组 问题 FCL得很多方法的返回值都是包含字符的Byte数组而不是返回一个String,这样的方法包含在如下的类中: · System.Net.Sockets.Socket.Receive · System.Net.Sockets.Socket.ReceiveFrom · System.Net.Sockets.Socket.BeginReceive · System.Net.Sockets.Socket.BeginReceiveFrom · System.Net.Sockets.Network

8位二值图像转化为1位二值图像

8位二值图像转化为1位二值图像 本文以bmp图像格式为例对如何将8位二值图像转换为1位二值图像进行说明 8位二值图像 对于普通的bmp格式二值图像,其每个像素存储为8位(即每个像素占一个字节存储空间). 1位二值图像 而同样的bmp格式二值图像,也可以在存储时,每位只占用1个bit的空间,这样格式的二值图像占用的总存储空间约等于8位二值图像的1/8(由于文件头的大小基本不变,当图像较大时,占用存储基本是8倍). 8位二值图像与1位二值图像的转换 由于8位bmp格式二值图像与1位bmp二值图像,不

怎么样把一个byte[]数组转化为string的2维数组呢?

问题描述 怎么样把一个byte[]数组转化为string的2维数组呢? 是先转为string,然后再转数组,最后转为2维数组?能有高手代码演示下吗? 解决方案 首先,String有一个构造函数String(byte[] b)可以用字节数组创建String数据. 其次,怎么转成二维数组呢?是想将这个字节数组拆分么?能说一下你的需求吗,为什么要转成二维数组呢. 解决方案二: 你可以吧byte拆分出来,然后在往String数组里面放.. 解决方案三: 你可以吧byte拆分出来,然后在往String数组