【发布时间】:2013-06-06 02:49:23
【问题描述】:
我有一个蓝牙模块,它正在向我的手机发送一个 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 是否是传入数据的正确格式。
目前从图表输出的值比我预期的要大得多。
感谢任何帮助。
【问题讨论】:
-
到目前为止这看起来不错。 uint8_t 是这种操作的合理类型,您不应该对有符号数字和这种方式的位移感到任何意外。你确定“[sView 更新:iChanI : iChanQ];”是正确的(我的 Objective-C 有点生疏,但我不记得有两个未命名参数的调用)
-
sView 更新正在输出一个两通道图。我是否正确移动数据,应该是 8 还是 12?
-
“字节长 12 位”?那不是一个字节,是吗? [我故意忽略了 C 标准定义,即“一个 char 是一个字节,而 char 可以是任何大小”,因为我严重怀疑这段代码是否在使用 12、24 或 36 位字的机器上运行每个字符 12 位]
-
“字节长 12 位”是什么意思?您的意思是 10 字节数组总共由 120 位组成吗?如果是这样,我对此表示怀疑,那么 uint8_t 在这里是相当不合适的。
-
对不起 iChanI 和 iChanQ 是 12 位的。
标签: c++ objective-c bytearray