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:

二進制與十六進制互轉測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM