int和byte[]之間的轉換
阿新 • • 發佈:2019-01-02
有時候和C的程式通訊的時候,我們在封裝協議時,可能需要將Java裡的int值,轉換成byte[]後用socket傳送。所以我們需要將32位的int值放到4位元組的byte[]裡。
/** * int值轉成4位元組的byte陣列 * @param num * @return */ public static byte[] int2byteArray(int num) { byte[] result = new byte[4]; result[0] = (byte)(num >>> 24);//取最高8位放到0下標 result[1] = (byte)(num >>> 16);//取次高8為放到1下標 result[2] = (byte)(num >>> 8); //取次低8位放到2下標 result[3] = (byte)(num ); //取最低8位放到3下標 return result; }
反過來,將4位元組的byte[]轉換成int 值:
/** * 將4位元組的byte陣列轉成int值 * @param b * @return */ public static int byteArray2int(byte[] b){ byte[] a = new byte[4]; int i = a.length - 1,j = b.length - 1; for (; i >= 0 ; i--,j--) {//從b的尾部(即int值的低位)開始copy資料 if(j >= 0) a[i] = b[j]; else a[i] = 0;//如果b.length不足4,則將高位補0 } int v0 = (a[0] & 0xff) << 24;//&0xff將byte值無差異轉成int,避免Java自動型別提升後,會保留高位的符號位 int v1 = (a[1] & 0xff) << 16; int v2 = (a[2] & 0xff) << 8; int v3 = (a[3] & 0xff) ; return v0 + v1 + v2 + v3; }