原文网址:http://blog.csdn.net/caijunjun1006/article/details/11740223

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[]数组和十六进制字符串之间转化的工具类:

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

下面是测试程序:

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

控制台输出:

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

OK!

【转】Javabyte[]数组和十六进制String之间的转换Util------包含案例和代码的更多相关文章

  1. Javabyte[]数组和十六进制String之间的转换Util------包含案例和代码

    Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符, ...

  2. C++string,char* 字符数组,int类型之间的转换

    string.int 常见类型之间相互转换 int & string 之间的转换 C++中更多的是使用流对象来实现类型转换 针对流对象 sstream实现 int,float 类型都可以实现 ...

  3. java字符数组char[]和字符串String之间的转换

    java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...

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

    string 转换成 Char[] string ss = "abcdefg"; char[] cc = ss.ToCharArray(); Char[] 转换成string st ...

  5. 如何在Byte[]和String之间进行转换

    源自C#与.NET程序员面试宝典. 如何在Byte[]和String之间进行转换? 比特(b):比特只有0 1,1代表有脉冲,0代表无脉冲.它是计算机物理内存保存的最基本单元. 字节(B):8个比特, ...

  6. c# String ,String[] 和 List<String>之间的转换

    C#对字符串进行处理时,经常需要进行String,String[]和List<String>之间的转换 本文分析一下它们的差异和转换 一. 1. String > String[] ...

  7. java中Integer 和String 之间的转换

    java中Integer 和String 之间的转换 将数组转换成字符串:char[] array = {'a','b','c','d','e'};String str = new String(ar ...

  8. 基本数据类型、包装类、String之间的转换

    package 包装类; /** *8种基本数据类型对应一个类,此类即为包装类 * 基本数据类型.包装类.String之间的转换 * 1.基本数据类型转成包装类(装箱): * ->通过构造器 : ...

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

    目录 1.char[]与string之间的转换 2.byte[]与string之间的转化 1.char[]与string之间的转换 //string 转换成 Char[] string str=&qu ...

随机推荐

  1. Java基础知识强化之集合框架笔记31:集合之泛型类的概述和基本使用

    1. 为什么会有泛型呢? (1)早期的Object类型可以接收任意的对象类型,但是在实际使用中,会有类型转换的问题,也存在这隐患,所以Java提供了泛型来解决这个安全问题. 2. 泛型类的使用: (1 ...

  2. Codeforces 231E - Cactus

    231E - Cactus 给一个10^5个点的无向图,每个点最多属于一个环,规定两点之间的简单路:从起点到终点,经过的边不重复 给10^5个询问,每个询问两个点,问这两个点之间有多少条简单路. 挺综 ...

  3. CSS的clip-path(转)

    基本概念 clip-path从单词"clip path"的直译上来说,表示的就是裁剪路径.既然有裁剪,咱们就来了解这里面的几个简单的概念. 裁剪就是从某样东西剪切一块.比如说,我们 ...

  4. HTML5 ArrayBufferView之DataView

    DataView视图 如果一段数据包括多种类型(比如服务器传来的HTTP数据),这时除了建立ArrayBuffer对象的复合视图以外,还可以通过DataView视图进行操作. DataView视图提供 ...

  5. copy file using FileReader/Writer.

    The code below demonstates copying file using 'FileReader' and 'FileWriter'. class CopyV2 extends Ti ...

  6. 【原】ios tableViewCell 自适应高度

    原文:http://www.cnblogs.com/A--G/p/4819051.html 前言:之前在做一个类似微博的小需求时候,用table view实现了微博文字和图片等等的基本展示,由于文字和 ...

  7. C# var

    VAR 是3.5新出的一个定义变量的类型其实也就是弱化类型的定义VAR可代替任何类型编译器会根据上下文来判断你到底是想用什么类型的 至于什么情况下用到VAR 我想就是你无法确定自己将用的是什么类型就可 ...

  8. Elasticsearch学习1--head插件安装

    1.简要介绍 elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序. 2.最近尝试学习elasticsearch,查了一些资料,但 ...

  9. 对数据预处理的一点理解[ZZ]

    数据预处理没有统一的标准,只能说是根据不同类型的分析数据和业务需求,在对数据特性做了充分的理解之后,再选择相关的数据预处理技术,一般会用到多种预处理技术,而且对每种处理之后的效果做些分析对比,这里面经 ...

  10. POJ 1734.Sightseeing trip (Floyd 最小环)

    Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...