首頁  >  文章  >  Java  >  詳細介紹Java 位元組數組類型(byte[])與int型別互轉方法的程式碼實例

詳細介紹Java 位元組數組類型(byte[])與int型別互轉方法的程式碼實例

黄舟
黄舟原創
2017-03-08 10:21:531693瀏覽

下面小編就為大家帶來一篇Java 位元組陣列型別(byte[])與int型別互轉方法。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

程式碼如下:


public class CommonUtils {
 //高位在前,低位在后
 public static byte[] int2bytes(int num){
 byte[] result = new byte[4];
 result[0] = (byte)((num >>> 24) & 0xff);//说明一
 result[1] = (byte)((num >>> 16)& 0xff );
 result[2] = (byte)((num >>> 8) & 0xff );
 result[3] = (byte)((num >>> 0) & 0xff );
 return result;
 }
 
 //高位在前,低位在后
 public static int bytes2int(byte[] bytes){
 int result = 0;
 if(bytes.length == 4){
  int a = (bytes[0] & 0xff) << 24;//说明二
  int b = (bytes[1] & 0xff) << 16;
  int c = (bytes[2] & 0xff) << 8;
  int d = (bytes[3] & 0xff);
  result = a | b | c | d;
 }
 return result;
 }
 
 public static void main(String[] args){
 int a = -64;
 System.out.println("-64="+Integer.toBinaryString(-64));
 byte[] bytes = CommonUtils.int2bytes(a);
 for(int i = 0 ; i<4 ; i++){
  System.out.println(bytes[i]);
 }
 a = CommonUtils.bytes2int(bytes);
 System.out.println(a);
 
 }
}


運行結果如下:


-64=11111111111111111111111111000000
-1
-1
-1
-64
-64


##說明1:

-64轉換為二進位原碼為[10000000][00000000][00000000][010000000]

#將原碼變成補碼為[11111111][1111111] [11111111][11000000],與控制台輸出結果相同,可以看到在

java中二進位以補碼的形式表示

-64 >>> 24後(無符號右移,高位補0),變成[00000000][00000000][00000000][11111111]

將上步結果& 0xff後,仍為[00000000][000000][000000] 11111111],由於0xff的值為[00000000][00000000][00000000][11111111],故& 0xff的目的是將最

低8位元保持不變,其餘位置為0#接著將結果強轉為byte類型,保留低位,截去高位,變成[11111111],可以看出

上步的0xff其實是沒有必要的,無論高位是多少,最終都會被截去

故result[0]為[11111111]=-1

依此類推:

result[1]为[11111111]=-1
result[2]为[11111111]=-1
result[3]为[11000000]=-64

##說明2:

byte[0]為[11111111],首先會將byte[0]轉換為int型別(在位移運算前,會將byte型別轉換為int型,若為正數,高位補0,若為負數,高位補1

),高位補1,變為[11111111][11111111][11111111][11111111]

將上步結果& 0xff之後,將變為[00000000][00000000][00000000][11111111]

然後將上步結果<< 24(左位移,低位補0),將變為[ 11111111][00000000][00000000][00000000] = a

同理獲得b、c、d

最終a | b | c | d 即:

[11111111][00000000][00000000][00000000] | 
[00000000][11111111][00000000][00000000] | 由于<<16位之前& 0xff,故保证b的最高8位都为0
[00000000][00000000][11111111][00000000] | 由于<<8位之前& 0xff,故保证c的最高16位都为0
[00000000][00000000][00000000][11000000] 由于& 0xff,故保证d的最高24为都为0
=[11111111][11111111][11111111][11000000] = -64

可以看可以看到為了確保byte轉換成int時,補位不會對最終a | b | c | d的結果產生影響(置為0),

& 0xff是必須的

short與byte []之間的轉換,long與byte[]之間的轉換也是類似的

PS:

1,int型別佔4個字節,而byte型別只佔1個字節

2,原碼:最高位為符號位,其餘位用來表示數值大小

2的原碼:00000010

-2的原碼:10000010

3,反碼:

正數的反碼與其原碼相同;

負數的反碼符號位元保持不變,其餘位元按位取反2的反碼:00000010

-2的反碼:11111101

4,補碼:正數的補碼與其原碼相同;負數的補碼為此負數的反碼+1

2的補碼:00000010

# -2的補碼:11111110

 以上就是詳細介紹Java 位元組數組類型(byte[])與int類型互連方法的程式碼實例的內容,更多相關內容請關注PHP中文網(www .php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn