2014-07-12 46 views
2

我正在對塊大小爲4字節的塊執行按位操作。我已經使用ByteBuffer將4個字節的塊轉換爲4個字節的整數來執行此操作。Java - Casting Int到字節 - 奇數結果

一旦完成,我需要將它們轉換回字節。使用ByteBuffer,我正在執行此操作。下面是一些示例代碼,數據,突顯我的困惑:

int a = 1610612739; //simulate casting the 4-byte block 60 00 00 03 
ByteBuffer b = ByteBuffer.allocate(4); 
b.putInt(a); 
byte[] b1 = (b.array()); 

現在,這個代碼後,我希望b1持有如下:

b1[0]: 60 
b1[1]: 00 
b1[2]: 00 
b1[3]: 03 

但是,這不是發生了什麼。相反,我得到

b2[0]: 96 
b2[1]: 0 
b2[2]: 0 
b2[3]: 3 

我的樣品整數,二進制,應該是::

0110 0000 0000 0000 0000 0000 0000 0011其中最左邊位是符號。

96 00 00 03十進制是2,516,582,403,它位於Java的32位int範圍之外。

有誰知道發生了什麼事?

+14

這是因爲'96 == 0x60'。 (提示:刪除的問題,而不是太多的人看到它:-) – dasblinkenlight

+2

+1思維太複雜。^_^ – Dawnkeeper

+1

經過多年的編程,您可以獲得這些列表。從忘記複製一個DLL,並想知道爲什麼沒有什麼變化,多次閱讀一些代碼,並錯過了一個錯誤,大學立即用分號結束一個if語句。它發生了。 – Dawnkeeper

回答

3

問題是,你認爲它應該顯示在十六進制但它顯示在小數點。而已。