CoreBluetooth发现pheriperal广告数据格式

时间:2015-04-29 14:07:02

标签: ios objective-c core-bluetooth

我正在使用CoreBluetooth来发现BLE设备。 在

- (void)centralManager:(CBCentralManager *)central
 didDiscoverPeripheral:(CBPeripheral *)peripheral
     advertisementData:(NSDictionary *)advertisementData
                  RSSI:(NSNumber *)RSSI

我收到advertisementData字典

{
    kCBAdvDataIsConnectable = 1;
    kCBAdvDataLocalName = "Gate_02";
    kCBAdvDataManufacturerData = <00ff0102 0303>;
}

如果我尝试阅读advertisementData[@"kCBAdvDataManufacturerData"]课程,我会获得_NSInlineData。如何转换为NSStringNSData对象?

1 个答案:

答案 0 :(得分:2)

NSInlineData NSData。更具体地说,它是NSData的(私有)子类 - 它是Cocoa中的一种常见模式,称为class cluster

因此,您可以在NSData的实例上使用NSInlineData的所有方法。

我不确定你是什么意思&#34;将NSData转换为NSString&#34;。 kCBAdvDataManufacturerData的值看起来不像NSString(因为它的第一个字节是0x00,它通常用于终止字符串)。

如果要将十六进制数据转换为十进制数,则无需先将其转换为NSString。您可以逐字节地迭代NSData,如下所示:

  for(NSUInteger i = 0; i < data.length; ++i) {
    Byte byte = 0;
    [data getBytes:&byte range:NSMakeRange(i, 1)];
    //do something with byte
}