我目前正在制作一个Android应用程序,它接受来自设备的蓝牙测量。数据打包的方式是4个字节。我需要从这些字节中获取两个值。
第一个值由:第一个字节的6位和7位以及字节2的第0位到第6位
第二个值更简单,由完整的第3个字节组成。
访问这些位值,组合它们并将它们转换为整数值有什么好方法?现在我正在尝试从字节数组转换为bitset,然后访问各个位以创建新的字节,然后将其转换为整数。
谢谢,请问我是否不够清楚。
答案 0 :(得分:2)
我想通了:我使用这种方法将字节数组转换为int
public static int byteArrayToInt(byte[] b, int offset) {
int value = 0;
for (int i = 0; i < 4; i++) {
int shift = (4 - 1 - i) * 8;
value += (b[i + offset] & 0x000000FF) << shift;
}
return value;
}
然后我使用了pokey描述的方法。谢谢你的帮助!
答案 1 :(得分:1)
我不确定我是否正确理解了您的格式。 此位掩码是否与您的第一个值对应?
0xC07F0000
这是16-22,30,31位(这里使用的是基于零的索引,即第31位是最后一位)。
另一件事是,您的价值应该是签名还是未签名?
无论如何,如果这是我假设的方式,那么你可以用一些位掩码转换它:
unsigned int val = 0xdeadbeef;
unsigned int mask1 = 0xC0000000;
unsigned int mask2 = 0x007F0000;
unsigned int YourValue = (val&mask1)>>23 | (val&mask2)>>16;
以与其他值相同的方式执行此操作。定义一个位掩码并将其移到右侧。完成。
干杯