2011-11-01 37 views
1

我正在使用ByteBuffer API將對象轉換爲字節。對象的類是如下ByteBuffer api給出錯誤的整數值

public class Obj{ 
int a; // size 1 byte 
int b; // size 4 bytes 
int c; // size 4 bytes 
} 

使用的ByteBuffer API,我已分配的對象

ByteBuffer bbf = ByteBuffer.allocate(9); 
bbf.put((byte) this.getA()); 
bbf.putInt(this.getB()); 
bbf.putInt(this.getC()); 
byte[] msg = bbf.array(); 

我設置B的值作爲100,但是當我轉換字節數組從直到長度爲4的偏移1 ,我得到了一個不同的整數值。 任何想法問題在哪裏? 謝謝!

+0

偏移量是一個:0,B 1,C:5。你需要價值是大端還是小端? –

+0

我將字節順序設置爲Little Endian。但問題仍然存在 –

回答

2

代碼工作,因爲它應該,如果你確實有1,2,3,4指數選擇字節,他們將獲得價值100:

ByteBuffer bbf = ByteBuffer.allocate(9); 
bbf.put((byte) 10); 
bbf.putInt(100); 
bbf.putInt(55); 
byte[] msg = bbf.array(); 

byte[] from4to8 = Arrays.copyOfRange(msg, 1, 5); 

ByteBuffer buf2 = ByteBuffer.wrap(from4to8); 
System.out.println(buf2.getInt());    // Prints 100 

一些注意事項:

  • 請記住,在端可以根據系統的不同(所以檢查端Ø ñ兩臺主機上,如果這是協議的一部分)
  • 您從bbf.array()電話中得到的數組是一個支持數組,即:

    修改此緩衝區的內容將導致返回數組的內容被修改,反之亦然。

+0

嘗試了你的代碼,字節順序爲LittleEndian。我得到的打印值爲1677721600 –

+0

這就是你得到的價值,如果你採取字節0,1,2,3,而不是1,2,3,4。 (也就是說,在我的答案中,如果您從1.5更改爲0.4)。 – aioobe

+0

第二個音符是否意味着我必須分別使用不同的ByteBuffer對象來轉換每個實例變量?如果沒有請詳細解釋 –

1

據我所看到的,B是偏移1

+0

對不起,錯字。更正。 –