原文网址: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. CSS块级元素、内联元素概念

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  2. 处理移动端click事件300ms延迟的好方法—FastClick

    下载地址:https://github.com/ftlabs/fastclick 1.click事件为什么有延迟? “...mobile browsers will wait approximatel ...

  3. 让我们写的程序生成单个的exe文件(C#winform程序举例)

    一准备: 首先你要有自己写好的代码程序 然后你需要在百度搜索Enigma Virtual Box 6.90并下载,运行后可看到如何的界面 注意:首次启动是英文的,更改语言后再次启动就是中文了. 二制作 ...

  4. 浅谈 trie树 及其实现

    定义:又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构, 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 核心思想:是空间换时间.利用字符串的公共前缀来降低查询时间的开 ...

  5. WHU 1579 Big data (DP)

    题意: f[0]=0,f[i]=f[i-1]+a or b. 求满足L<=∑f[n]<=R的序列的种数 n<100.  |a|,|b|<=10000.  |L|,|R|< ...

  6. 【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋

    Description 黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是 ...

  7. jQuery慢慢啃筛选(四)

    1.eq(index|-index) 获取第N个元素 其中负数:一个整数,指示元素的位置,从集合中的最后一个元素开始倒数.(1算起) $("p").eq(1)//获取匹配的第二个元 ...

  8. 《作业控制系列》-“linux命令五分钟系列”之十

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  9. SVN更新失败,提示locked

    使用SVN更新资源时,提示locked,解决方案如下: 首先找到是哪个文件不能进行更新/提交,在本地工作区间中找到这个文件对应的目录,目录里面会有.svn文件夹,这个文件夹默认是隐藏的,需要设置文件夹 ...

  10. 反射给对象赋值遇到的问题——类型转换[转http://blog.csdn.net/xiaohan2826/article/details/8536074]

    发布时间:2012-10-25 10:49浏览次数:225 给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致.   创建对象实例的 ...