【问题标题】:Converting sections of byte arrays to integer values将字节数组的部分转换为整数值
【发布时间】:2011-09-26 08:13:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: android string bluetooth integer bytearray


    【解决方案1】:

    我想通了:我使用这种方法将字节数组转换为 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 描述的方法。感谢您的帮助!

    【讨论】:

      【解决方案2】:

      我不确定我是否正确理解了您的格式。 此位掩码是否对应您的第一个值?

      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;
      

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

      干杯

      【讨论】:

      • 非常感谢您。唯一的事情是我从蓝牙设备接收结果作为 byte[] 数组。我可以把它变成一个整数然后使用你的过程吗?
      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 2017-06-27
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多