& 0xFF byte字节数组转换为十进制

byte[]  b = new byte[2];

b[0] = -12;

byte     1个字节    

char     2个字节  

short    2个字节 

int        4个字节

long     8个字节

float     4个字节

double 8个字节

计算机存储数据机制:正数存储的二进制原码,负数存储的是二进制的补码。  补码是负数的绝对值反码加1。

比如-12,-12 的绝对值原码是:0000 1100  取反: 1111 0011  加1:  1111 0100

byte --> int   就是由8位变 32 位 高24位全部补1: 1111 1111 1111 1111 1111 1111 1111 0100 ;

0xFF 是计算机十六进制的表示: 0x就是代表十六进制,A B C D E F  分别代表10 11 12 13 14 15   F就是15  一个F 代表4位二进制:可以看做 是   8  4  2  1。

0xFF的二进制表示就是:1111 1111。   高24位补0:0000 0000 0000 0000 0000 0000 1111 1111;

-12的补码与0xFF 进行与(&)操作  最后就是0000 0000 0000 0000 0000 0000 1111 0100 

转换为十进制就是 244。

   /**
    * 将字节数组转换为16进制字符串
    * @param bytes
    * @return
    */
   public static String binaryToHexString(byte[] bytes) { 
       if (bytes == null || bytes.length == 0) return "";
       String hexStr = "0123456789ABCDEF";  
       StringBuilder result = new StringBuilder("");  
       String hex = "";  
       for (byte b : bytes) {  
           hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));  
           hex += String.valueOf(hexStr.charAt(b & 0x0F));  
           result.append(hex);
           //result += hex + " ";//可加空格分割  
       }  
       return result.toString();  
   }
   
   /**
    * 将一组十六进制字符转换成字节数组
    * @param hexString
    * @return
    */
   public static byte[] hexStringToBytes(String hexString) {  
       if (hexString == null || hexString.equals("")) {  
           return null;  
       }  
       // toUpperCase将字符串中的所有字符转换为大写  
       hexString = hexString.toUpperCase();  
       int length = hexString.length() / 2;  
       // toCharArray将此字符串转换为一个新的字符数组。  
       char[] hexChars = hexString.toCharArray();  
       byte[] d = new byte[length];  
       for (int i = 0; i < length; i++) {  
           int pos = i * 2;  
           d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));  
       }  
       return d;  
   }
   
   /**
    * 返回在指定字符的第一个发生的字符串中的索引,即返回匹配字符  
    * @param c
    * @return
    */
   private static byte charToByte(char c) {  
       return (byte) "0123456789ABCDEF".indexOf(c);  
   }

 

个人收藏仅供个人参考

你可能感兴趣的:(& 0xFF byte字节数组转换为十进制)