下面小編就為大家帶來一篇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的原碼:100000103,反碼:正數的反碼與其原碼相同;
負數的反碼符號位元保持不變,其餘位元按位取反2的反碼:00000010
-2的反碼:11111101
4,補碼:正數的補碼與其原碼相同;負數的補碼為此負數的反碼+1
2的補碼:00000010# -2的補碼:11111110 以上就是詳細介紹Java 位元組數組類型(byte[])與int類型互連方法的程式碼實例的內容,更多相關內容請關注PHP中文網(www .php.cn)!