在Java中字节与十六进制的相互转换主要思想有两点:

1、二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。
2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示

我测试的Java代码如下:

  1. public class Test01 {
  2. private static String hexStr =  "0123456789ABCDEF";
  3. private static String[] binaryArray =
  4. {"0000","0001","0010","0011",
  5. "0100","0101","0110","0111",
  6. "1000","1001","1010","1011",
  7. "1100","1101","1110","1111"};
  8. public static void main(String[] args)
  9. {
  10. String str = "二进制与十六进制互转测试";
  11. System.out.println("源字符串:\n"+str);
  12. String hexString = BinaryToHexString(str.getBytes());
  13. System.out.println("转换为十六进制:\n"+hexString);
  14. System.out.println("转换为二进制:\n"+bytes2BinaryStr(str.getBytes()));
  15. byte [] bArray = HexStringToBinary(hexString);
  16. System.out.println("将str的十六进制文件转换为二进制再转为String:\n"+new String(bArray));
  17. }
  18. /**
  19. *
  20. * @param str
  21. * @return 转换为二进制字符串
  22. */
  23. public static String bytes2BinaryStr(byte[] bArray){
  24. String outStr = "";
  25. int pos = 0;
  26. for(byte b:bArray){
  27. //高四位
  28. pos = (b&0xF0)>>4;
  29. outStr+=binaryArray[pos];
  30. //低四位
  31. pos=b&0x0F;
  32. outStr+=binaryArray[pos];
  33. }
  34. return outStr;
  35. }
  36. /**
  37. *
  38. * @param bytes
  39. * @return 将二进制转换为十六进制字符输出
  40. */
  41. public static String BinaryToHexString(byte[] bytes){
  42. String result = "";
  43. String hex = "";
  44. for(int i=0;i<bytes.length;i++){
  45. //字节高4位
  46. hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));
  47. //字节低4位
  48. hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));
  49. result +=hex+" ";
  50. }
  51. return result;
  52. }
  53. /**
  54. *
  55. * @param hexString
  56. * @return 将十六进制转换为字节数组
  57. */
  58. public static byte[] HexStringToBinary(String hexString){
  59. //hexString的长度对2取整,作为bytes的长度
  60. int len = hexString.length()/2;
  61. byte[] bytes = new byte[len];
  62. byte high = 0;//字节高四位
  63. byte low = 0;//字节低四位
  64. for(int i=0;i<len;i++){
  65. //右移四位得到高位
  66. high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);
  67. low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));
  68. bytes[i] = (byte) (high|low);//高地位做或运算
  69. }
  70. return bytes;
  71. }
  72. }
 

运行后的输出结果如下:

源字符串:

二进制与十六进制互转测试

转换为十六进制:

E4BA8CE8BF9BE588B6E4B88EE58D81E585ADE8BF9BE588B6E4BA92E8BDACE6B58BE8AF95

转换为二进制:

11100100  10111010  10001100  11101000  10111111  10011011  11100101
 10001000  10110110 11100100  10111000  10001110  11100101  10001101
 10000001  11100101  10000101  10101101 11101000  10111111  10011011
 11100101  10001000  10110110  11100100  10111010  10010010 11101000
 10111101  10101100  11100110  10110101  10001011  11101000  10101111
 10010101

将str的十六进制文件转换为二进制并转为String:

二进制与十六进制互转测试

Java中二进制字节与十六进制互转的更多相关文章

  1. c#与java中byte字节的区别及转换方法

    原文:c#与java中byte字节的区别及转换方法 在java中  byte的范围在 [-128,127] 在C#中  byte的范围在 [0,255] 所以 java程序与C#程序 进行数据传输的时 ...

  2. Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...

  3. Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换

    public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...

  4. Java中的字节,字符与编码,解码

    ASCII编码 ASCII码主要是为了表示英文字符而设计的,ASCII码一共规定了128个字符的编码(0x00-0x7F),只占用了一个字节的后面7位,最前面的1位统一规定为0. ISO-8859-1 ...

  5. 弄清java中的字节与字符

    问题 在java中,一个字符等于多少字节? 或者更详细的问:在java中,一个英文字符等于多少字节?一个中文字符等于多少字节? 答案 Java采用unicode来表示字符,java中的一个char是2 ...

  6. Java中根据字节截取字符串

    一.简介 为了统一世界各国的字符集,流行开了Unicode字符集,java也支持Unicode编码,即java中char存的是代码点值,即无论是‘A’还是‘中’都占两个字节. 代码点值:与Unicod ...

  7. java中 二进制 八进制 十六进制 十进制 相互转换 最简方法

    package com.swift; import java.util.Scanner; public class Hex2Decimal { public static void main(Stri ...

  8. 【转】java中float与byte[]的互转 -- 不错

    原文网址:http://tjmljw.iteye.com/blog/1767716 起因:想把一个float[]转换成内存数据,查了一下,下面两个方法可以将float转成byte[]. 方法一 imp ...

  9. 在Java中按字节获得字符串长度的三种方法

    转载:http://www.blogjava.net/nokiaguy/archive/2010/04/11/317982.html 由于Java是基于Unicode编码的,因此,一个汉字的长度为1, ...

随机推荐

  1. linux 删除命令注意事项(大神勿看)

    在做软连接的时候,想到一个问题,如果删除软连接,会不会删除源文件. 如果删除是真删除的话,一旦操作错误那就后悔去吧. 效果是这样的:#rm -rf pp/          如果pp是软连文件夹,那么 ...

  2. 【Paper Reading】Object Recognition from Scale-Invariant Features

    Paper: Object Recognition from Scale-Invariant Features Sorce: http://www.cs.ubc.ca/~lowe/papers/icc ...

  3. maven使用技巧

    转:MAVEN常用命令 Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1 ...

  4. Hibernate中如何完成持久化类和数据库映射文件

    因为最近写项目需要要到,就在这里码码字,方便以后做一个参考,在这里,我通过的是myeclipse的反向工程来配置持久化类和数据的映射文件的. 1.打开myeclipse,打开数据库视图,对应的是Win ...

  5. Java基础学习总结(2)——接口

    一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如"金丝猴是一种动物",金丝猴从动物这个类继承,同时"金丝猴是一种值钱的东西",金丝猴 ...

  6. 严重: 文档无效: 找不到语法。 at (null:2:19)

    1.错误描写叙述 严重: 文档无效: 找不到语法. at (null:2:19) org.xml.sax.SAXParseException; systemId: file:/D:/MyEclipse ...

  7. hadoop hdfs空间满后重新启动不了

    server检查的时候,发现存在HDFS上的文件无法同步.再发现hadoop停掉了. 进行重新启动,重新启动不成功. 查看hadoop日志: 2014-07-30 14:15:42,025 INFO ...

  8. poj 2154 Color(polya计数 + 欧拉函数优化)

    http://poj.org/problem?id=2154 大致题意:由n个珠子,n种颜色,组成一个项链.要求不同的项链数目.旋转后一样的属于同一种.结果模p. n个珠子应该有n种旋转置换.每种置换 ...

  9. 13.MongoDB 连接命令格式

    转自:https://www.linuxidc.com/Linux/2016-03/129456.htm 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上.输出结果如 ...

  10. [NOIP2015模拟10.27] 挑竹签 解题报告(拓扑排序)

    Description 挑竹签——小时候的游戏夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏.挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签.如果动了其他的竹签,就要换对手来挑.在所有 ...