Java中二进制字节与十六进制互转

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

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

我测试的Java代码如下:

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


运行后的输出结果如下:

源字符串:

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

转换为十六进制:

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:

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

posted @   brave-sailor  阅读(16357)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2016-05-04 Java enum的用法详解
2016-05-04 Android Application的使用及其生命周期
2014-05-04 cs模式与bs模式
2014-05-04 B2B,B2C和C2C的区别
2014-05-04 Java多线程,哲学家就餐问题
2014-05-04 10个精妙的Java编码最佳实践
2014-05-04 浅谈导航设计,开发者必备的十大实用技巧
点击右上角即可分享
微信分享提示