如何从NSData(OBDII)获取第三个字节

时间:2017-06-01 10:07:14

标签: ios objective-c bluetooth-lowenergy obd-ii

我试图制作iOS应用程序,通过OBDII(BLE)连接到带电话的汽车。

我可以与该模块建立连接并询问RPM,并以部分方式返回答案。

首先 - 010C(数据用于获取RPM')

然后 - 41 0C 0A 98 \n \n

要读取RPM,我只需要第三个和第四个字节(0A98)。我该怎么办?

部分代码来自:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F"]])
    {
        //NSLog(@"char %@", characteristic);

        NSData *sensorData = [characteristic value];
        uint8_t *bodyData = (uint16_t *)[sensorData bytes];

        NSLog(@"data bytes %s", bodyData);
    }
}

2 个答案:

答案 0 :(得分:0)

试试这个

NSData *sensorData = [characteristic value];
const uint8_t* bytes = (const uint8_t*)[sensorData bytes];
uint8_t third = bytes[3];

答案 1 :(得分:0)

解析 OBD2 答案的方法是将 NSData 转换为字符串,然后遍历半字节以计算单个字节。

检查 Convert Hex to ASCII number on Objective-c 以获取一种方法。

或者,您可能想看看 https://github.com/mickeyl/LTSupportAutomotive,它已经完成了繁重的工作。