从数组中获取字节值并合并它们。

时间:2013-06-05 13:30:34

标签: c++ objective-c bytearray

我有一个蓝牙模块,它正在向我的手机发送10 BYTE 阵列数据包。

我需要获取前两个字节(0,1)并将它们合并在一起并将它们发送到图形查看器。 (0 =高字节1 =低字节)。

字节长度为12位。

这是我到目前为止的尝试:

// streamDelegate gave us some data, hand it over to print out
 - (void)receivedData:(uint8_t *)data length:(NSUInteger)len {

uint16_t iChanI = 0;
uint16_t iChanQ = 0;

iChanI = ((data[0] <<8) + data[1]);
iChanQ = ((data[4] <<8) + data[5]);

[sView Update: iChanI : iChanQ];
[sView setNeedsDisplay];

}

我不确定unit8_t是否是正确的数据格式。

目前,图表输出的值远大于我的预期。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可能有错误的字节序(哪个字节最重要)。所以试试

iChanI = ((data[1] <<8) + data[0]);

和/或
您在iChanI的4个MSBits中有意外数据。将这些位归零:

iChanI &= 0x0FFF;

一起

iChanI = ((data[1] <<8) + data[0]) & 0x0FFF;

iChanQ执行相同操作。


您可以改为创建一种类型

typedef struct {
  uint16_t iChanI;
  uint16_t spare1;
  uint16_t iChanQ;
  uint16_t spare3;
  uint16_t spare4;
  } PhonePAcket_t;  // Ten byte packet

(void)receivedData:(uint8_t *)data length:(NSUInteger)len {
  const PhonePAcket_t *pp = (const PhonePAcket_t*) data;
  uint16_t iChanI = pp->iChanI & 0x0FFF;
  uint16_t iChanQ = pp->iChanQ & 0x0FFF;

 [sView Update: iChanI : iChanQ];
 [sView setNeedsDisplay];
}

我避免使用位数组,但可以使用它们 可能需要包装属性。我对你的情况的细节不太熟悉。