0

好的,所以我想要将字节写入 dataouptustream 并将该输出流发送出去。我可以做得很好。我遇到的问题是如何在字节内写入各个位,例如:

我想将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();

我在正确的轨道上吗?有没有一种非常简单/直接的方法来做到这一点?我必须做很多这样的事情,所以我需要真正了解如何将这些字节操作为我需要的任何东西。

4

1 回答 1

1

如果我正确理解了这个问题,您应该能够执行以下操作:

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

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

lsb您要为第一个号码保留的 LSB 数量在哪里( a),其余的可用于b

当然,如果您为 保留 8 位中的 2 位a,这意味着b必须使用 6 位或更少的位(即 b < 64)。因此,带有 100 的示例不太适用,因为您的结果不再是一个字节。100 需要 7 位,所以总共是 9 位。

于 2013-05-31T18:52:15.380 回答