大數據Java基礎(一)int型與byte型數組的轉換


int型與byte型數組的轉換

  為了在接下來的篇章中講解用Java實現文件的歸檔和解歸檔,需要先了解一下Java中int型與byte型數組之間的相互轉換。

  首先,我們先來看看int型轉換成byte型數組。

  我們知道,Java中,一個int型占用4個字節,一個byte型占用1個字節,所以,對於一個int型,我們需要一個長度為4的byte型數組來對其進行存儲。  

31位——24位 23位——16位 15位——8位 7位——0位

  一個int型的4個字節如上圖所示,假設用來存儲的字節數組為bytes[],那么,我們可以用bytes[0]存儲int型的第一個字節(7位——0位),bytes[1]存儲int型的第二個字節(15位——8位),bytes[2]存儲int型的第三個字節(23位——16位),bytes[3]存儲int型的第四個字節(31位——24位)。具體代碼如下:

 

 1 public static byte[] int2Bytes(int integer)
 2 {
 3     byte[] bytes=new byte[4];
 4     bytes[3]=(byte) integer>>24;
 5     bytes[2]=(byte) integer>>16;
 6     bytes[1]=(byte) integer>>8;
 7     bytes[0]=(byte) integer;
 8 
 9     return bytes;
10 }

  

  這里需要注意的是,當你將一個int型強制類型轉換為byte型的時候,最高的三個字節會被砍掉,只留下最低的8位賦值給byte型。

  接下來,我們來看一下byte型數組轉換成int型。

  我們知道,計算機是以補碼的形式存放數值型數據,當我們對一個byte型進行移位操作的時候,這個byte型會先自動補全到32位(即一個int型),再進行移位操作。舉個例子:一個byte型的-1,在內存中的補碼是八個1:11111111,當我們進行移位時,(比如說左移8位),它會進行補全,而且是有符號位的補全,再左移8位,所以最后結果是:11111111 11111111 11111111 00000000,但我們因為最后在將byte型數組轉換成int型的時候,需要對數組元素使用按位或( | )操作,因此,移位結果前面的符號位如果不去除,將影響我們的運算,得出一個錯誤的結果。(上例中我們左移8位,需要將11111111 11111111 11111111 00000000去掉前面的那些1,只保留次低位上的1,即為:0000000000000000 11111111 00000000)。

  我們可以先將byte數據元素與0xff(二進制的00000000 00000000 00000000 11111111)進行按位與運算( & ),再進行移位,來去除前面的符號位。byte型數組轉換成int型的代碼如下:

 

 1 public static int bytes2Int(byte[] bytes )
 2 {
 3     //如果不與0xff進行按位與操作,轉換結果將出錯,有興趣的同學可以試一下。
 4     int int1=bytes[0]&0xff;
 5     int int2=(bytes[1]&0xff)<<8;
 6     int int3=(bytes[2]&0xff)<<16;
 7     int int4=(bytes[3]&0xff)<<24;
 8 
 9     return int1|int2|int3|int4;
10 }

 


免責聲明!

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



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