我有一个蓝牙模块,它正在向我的手机发送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是否是正确的数据格式。
目前,图表输出的值远大于我的预期。
感谢任何帮助。
答案 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];
}
我避免使用位数组,但可以使用它们 可能需要包装属性。我对你的情况的细节不太熟悉。