【问题标题】:Writing individual bits into ByteArrayOutputStream将单个位写入 ByteArrayOutputStream
【发布时间】:2013-05-31 18:38:10
【问题描述】:

好的,所以我想要将字节写入 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();

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

【问题讨论】:

  • 你说你还没有真正测试过你的代码......你为什么不从这样做开始呢?另外,你想一直在大端工作吗?

标签: java


【解决方案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

【讨论】:

  • 是的,这就是我要找的。对 100 个很好的呼吁,这就是我在飞行中编造示例所得到的。
猜你喜欢
  • 2015-06-29
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2018-03-20
  • 2017-07-26
  • 1970-01-01
相关资源
最近更新 更多