天天看點

java中byte, int的轉換

最近在做些與編解碼相關的事情,又遇到了byte和int的轉換,看着那些關于反碼、補碼的說明依舊頭疼,還是記下些實用的方法吧。     int -> byte     可以直接使用強制類型轉換: byte b = (byte) aInt;     這個操作是直接截取int中最低一個位元組,如果int大于255,則值就會變得面目全非了。     對于通過InputStream.read()擷取的int,可采用這個方法将值還原。     byte -> int     這裡有兩種情況,一種是要求保持值不變,例如進行數值計算,可采用強制類型轉換:int i = (int) aByte;     另一種是要求保持最低位元組中各個位不變,3個高位元組全部用0填充,例如進行編解碼操作,     則需要采用位操作:int i = b & 0xff;     int InputStream.read()     該函數傳回一個int類型,範圍從0至255,如果到達流末尾,傳回-1。通過ByteArrayInputStream的源碼可以看到是如何從byte轉到int     public synchronized int read() {         return (pos < count) ? (buf[pos++] & 0xff) : -1;     }     int <-> byte[]     代碼轉自:java int 與 byte轉換      public static byte[] toByteArray(int iSource, int iArrayLen) {         byte[] bLocalArr = new byte[iArrayLen];         for (int i = 0; (i < 4) && (i < iArrayLen); i++) {             bLocalArr[i] = (byte) (iSource >> 8 * i & 0xFF);         }         return bLocalArr;     }     // 将byte數組bRefArr轉為一個整數,位元組數組的低位是整型的低位元組位     public static int toInt(byte[] bRefArr) {         int iOutcome = 0;         byte bLoop;         for (int i = 0; i < bRefArr.length; i++) {             bLoop = bRefArr[i];             iOutcome += (bLoop & 0xFF) << (8 * i);         }         return iOutcome;     }