Javabyte[]数组和十六进制String之间的转换

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

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

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

下面是实现byte[]数组和十六进制字符串之间转化的工具类:

[java] view
plain
copy

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

下面是测试程序:

[java] view
plain
copy

  1. package text.com;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         byte b1 = 11;  
  6.         byte b2 = 21;  
  7.         byte b3 = 31;  
  8.         byte b4 = 41;  
  9.         byte b5 = 51;  
  10.         byte b6 = 61;  
  11.         byte b7 = 71;  
  12.         byte b8 = 81;  
  13.         byte[] bytes = new byte[] { b1, b2, b3, b4, b5, b6, b7, b8 };  
  14.         String hexString = "0b 15 1f 29 33 3d 47 51";  
  15.         String str = BytesUtil.bytesToHexString(bytes);  
  16.         System.out.println("str--->" + str);  
  17.         byte[] hexStringToBytes = BytesUtil.hexStringToBytes(hexString);  
  18.         for (int i = 0; i < hexStringToBytes.length; i++) {  
  19.             System.out.println("hexStringToBytes---->" + hexStringToBytes[i]);  
  20.         }  
  21.     }  
  22.   
  23. }  

控制台输出:

str--->0b 15 1f 29 33 3d 47 51 
hexStringToBytes---->11
hexStringToBytes---->21
hexStringToBytes---->31
hexStringToBytes---->41
hexStringToBytes---->51
hexStringToBytes---->61
hexStringToBytes---->71
hexStringToBytes---->81

时间: 2024-11-09 14:20:49

Javabyte[]数组和十六进制String之间的转换的相关文章

『0015』 - Solidity Types - 动态字节数组(Dynamically-sized byte array)、固定大小字节数组(Fixed-size byte arrays)、string之间的转换关系

孔壹学院:国内区块链职业教育领先品牌 作者:黎跃春,区块链.高可用架构工程师 微信:liyc1215 QQ群:348924182 博客:http://liyuechun.org 固定大小字节数组(Fixed-size byte arrays)之间的转换 固定大小字节我们可以通过bytes0 ~ bytes32来进行声明,固定大小字节数组的长度不可变,内容不可修改.接下来我们通过下面的代码看看固定大小字节之间的转换关系. pragma solidity ^0.4.4; contract C { b

C#中char[]与string之间的转换

  string 转换成 Char[] string ss = "abcdefg"; char[] cc = ss.ToCharArray(); Char[] 转换成string string s = new string(cc); 此外,byte[] 与 string 之间的装换 byte[] bb = Encoding.UTF8.GetBytes(ss); string s = Encoding.UTF8.GetString(bb); 下面我们利用 StringBuilder 来进

深入 JAVA里面关于byte数组和String之间的转换问题

把byte转化成string,必须经过编码.  例如下面一个例子:  importjava.io.UnsupportedEncodingException; publicclass test{ publicstatic void main(String g[]) { Strings = "12345abcd"; byteb[] = s.getBytes(); Stringt = b.toString(); System.out.println(t); } } 输出字符串的结果和字符串s

C#中char[]与string之间的转换;byte[]与string之间的转化

  (1)C#中char[]与string互相转换的写法: string 转换成 Char[]string ss="abcdefg";char[] cc=ss.ToCharArray(); Char[] 转换成stringstring s=new string(cc); --------------------------------------------------(2) C#中byte[]与string互相转换的写法: byte[] 转换成stringbyte[] bb=Enco

Java 带分隔字符串、字符串数组和 ArrayList&amp;lt;String&amp;gt; 之间的转换

Java 带分隔字符串.字符串数组和 ArrayList<String> 之间的转换 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 一.先来认识一下标题说的这三件东西,也许描述的不

C#操作技巧的数据类型之间的转换

技巧|数据|数据类型|转换 我们在 VB 中的数据类型之间的转换是非常容易的cStr,cInt等等的函数,我们大家在使用的时候应该都已经是非常的清楚了,现在可以用C#做Web应用了!这下 我们又多了一种语言的选择,再加上确实有很多人对VB编程怀有很多的不理解:(,所以他们宁可使用C#进行编程,也有很多的同志立场不坚定!也想学习学习C#语言(比如:豆腐..),这样,数据转换的问题就突现出来了!此外还有对String 数据类型的转换首先我们来看看int和String 之间的转换int->String

VC之CString,wchar_t,int,string,char*之间的转换

    VC之CString,wchar_t,int,string,char*之间的转换 1. CString 转 wchar_t CString path = "asdf"; wchar_t wstr[256] = path.AllocSysString(); 或者: wchar_t wcstring[256]; MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);   2. wchar_t转CString WideCharToMul

MFC中char*,string和CString之间的转换

MFC中char*,string和CString之间的转换 一.    将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如:  CString theString( "This  is a test" );  LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;  方法二,使用strcpy.例如:  CString theString( "This  is a test" );  LPTSTR lpsz =

JAVA中list,set,数组之间的转换详解_java

JAVA的list,set,数组之间的转换,主要是使用Apache Jakarta Commons Collections,具体的方法如下:import org.apache.commons.collections.CollectionUtils;    String[] strArray = {"aaa", "bbb", "ccc"};    List strList = new ArrayList();    Set strSet = new