2013-05-31 29 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

相关问题