我正在使用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
。如何转换为NSString
或NSData
对象?
答案 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
}