如何从java中的8字节数据中挑出部分位

时间:2014-04-25 08:38:45

标签: java bytearray

我是Java新手。我在Java中有8个字节(或dlc个字节)的数据,如下所示:

int dlc = 8;
byte[] myData = new byte[dlc];

然后我想从myData得到值(起始位为50,长度为2位)。

我的想法是将myData转换为位,然后找到值从位50开始并且长度为2位,然后将位值转换为整数,这种方法好吗?如果它可用,那么如何在java中做到这一点?如果不是,有什么想法从字节数组中选出一部分值?


解决方案: 解决方案由@Zoyd提供

注意:从Android API 19添加了BitSet.valueOf(Bytebuffer)!因此,如果您具有较早的API级别,则无法使用valueOf()方法。您可以查看BitSet to and from integer/long

3 个答案:

答案 0 :(得分:1)

试试这个

(myData[6] & 0x60) >> 5

答案 1 :(得分:1)

Xing Fei的anwer很好,但是如果你需要一个通用方法,你可以从你的字节数组中创建一个BitSet:

final BitSet bs = BitSet.valueOf(myData);

然后,您可以编写,例如:

boolean b = bs.get(50);

获取bit 50的值。

答案 2 :(得分:0)

解释邢飞:myData[6]给出了第49到56位,通过将其与0x60(= 01100000)进行对比,您将第49,52,53,54,55和56位设置为零。如果你将这5位向右移动(>> - 运算符),你就得到了结果。