将字节数组的部分转换为整数值

时间:2011-06-30 21:21:27

标签: android string bluetooth integer bytearray

我目前正在制作一个Android应用程序,它接受来自设备的蓝牙测量。数据打包的方式是4个字节。我需要从这些字节中获取两个值。

第一个值由:第一个字节的6位和7位以及字节2的第0位到第6位

第二个值更简单,由完整的第3个字节组成。

访问这些位值,组合它们并将它们转换为整数值有什么好方法?现在我正在尝试从字节数组转换为bitset,然后访问各个位以创建新的字节,然后将其转换为整数。

谢谢,请问我是否不够清楚。

2 个答案:

答案 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;

以与其他值相同的方式执行此操作。定义一个位掩码并将其移到右侧。完成。

干杯