在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. [USACO4.2]完美的牛栏The Perfect Stall

    题目:USACO Training 4.2(在官网上提交需加文件输入输出).洛谷P1894. 题目大意:有n头奶牛m个牛栏,每头牛只会在自己喜欢的牛栏里产奶,问一次最多有多少奶牛能产奶. 解题思路:二 ...

  2. 详解:(cron , crontab , anacron)

    导读: 人类把时间做了切割,想象一条笔直的线永远向前,本来这条直线上什么都没有,但是人类根据时间的长短(单位)在这条直线上做了密密麻麻的标记(世纪-年-月-日-时-分-秒-纳秒......),通过这样 ...

  3. Linux入门基础二

    1.查看用户 who参数          说明 -a      打印能打印的全部 -d      打印死掉的进程 -m    同am i,mom likes -q      打印当前登录用户数及用户 ...

  4. 2015 Multi-University Training Contest 3 hdu 5316 Magician

    Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  5. a+=b 等价于 a=a+b ?

    a += b和a = a + b全然等价么(java)?可能非常多人以为是一样的,事实上并不是等价的,以下看一下证据吧. public class Test { public static void ...

  6. 兔子--Android Support v4包丢失的解决的方法

    在开发中,Android Support v4包丢失的解决的方法: Project->properties->Java Build Path->Libraries->Add E ...

  7. web集群中经常使用的session同步解决方式及对照

    随着站点的功能越来越多,用户量越来越庞大,单节点模式已经严重不能支撑整个系统的正常运作,轻则用户页面訪问时间越来越慢.重则就会导致整个系统瘫痪.这时候 就须要优化或调整眼下的架构,大部分人就会採用各种 ...

  8. Light OJ 1080 - Binary Simulation

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1080 1080 - Binary Simulation PDF (Englis ...

  9. ELK搭建(filebeat、elasticsearch、logstash、kibana)

    ELK部署(文章有点儿长,搭建时请到官网将tar包下载好,按步骤可以完成搭建使用) ELK指的是ElasticSearch.LogStash.Kibana三个开源工具 LogStash是负责数据的收集 ...

  10. 36.创建模板mylist

    node.h #pragma once //创建模板 template <class T> class Node { public: T t;//数据 Node *pNext;//指针域 ...