2013-05-31 31 views
0

好的,我想要的是將數據寫入數據流,並將該輸出流發送出去。我可以做得很好。我遇到的問題是如何在字節內部寫入各個位,例如:將單個位寫入ByteArrayOutputStream

我想將LSB(0)寫爲1,然後重新生成1-7位應該是100的值。或者,也許我希望前2個LSB(0-1)爲3,重新生成爲5.這是我迄今的嘗試(到目前爲止我還沒有真正測試過這個代碼)。

ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
DataOutputStream daos=new DataOutputStream(baos); 
//LSB should be 0, the remaining should be the value 50 
daos.writeByte(50 >>> 1); 
//2 LSBs should be 2 (10) and the remaining should be 100 
daos.writeByte(Integer.parseInt(Integer.toBinaryString(2) + Integer.toBinaryString(100))); 
daos.close(); 
message = baos.toByteArray(); 

我在正確的軌道上嗎?有沒有一個非常簡單/直接的方法來做到這一點?我必須做很多這樣的事情,所以我需要真正理解如何操縱這些字節到我需要的任何地方。

+0

你說你還沒有真正測試過你的代碼......你爲什麼不從頭開始呢?另外,你是否想要一直工作在大前端? – fge

回答

1

如果我理解正確的問題,你應該能夠做這樣的事情:

byte a = 2; 
byte b = 100; 
byte lsb = 2; 

int c = a + (b << lsb); 

哪裏lsb是要保留您的第一個數字(a)LSB的數,剩下的就是可用於b

當然,如果你爲a保留8位中的2位,這意味着b將不得不使用小於6的位(即b < 64)。所以100的例子不太適用,因爲你的結果不再是一個字節。 100需要7位,所以總數是9位。

+0

是的,這是我正在尋找的。在100上的好的呼叫,這正是我在飛行中編制例子時所得到的。 – LiverpoolFTW

相關問題