Ios 如何解码BLE广告数据
扫描BLE设备后,我调用以下方法:Ios 如何解码BLE广告数据,ios,objective-c,bluetooth-lowenergy,ibeacon,core-bluetooth,Ios,Objective C,Bluetooth Lowenergy,Ibeacon,Core Bluetooth,扫描BLE设备后,我调用以下方法: - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 并接收以下广告数据: { kCBAdvDataManufacturerData = <ffff0215 c
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
并接收以下广告数据:
{ kCBAdvDataManufacturerData = <ffff0215 cf6d4a0f ..... adf2f491 ... ... > }
{kCBAdvDataManufacturerData=}
如何解码数据并访问其信息?我的小代码片段:
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
// NSLog(@"%@", central);
NSLog(@"%@", peripheral);
//NSLog(@"%@", advertisementData);
NSLog(@"%@", RSSI);
// more details:
NSString* name = [peripheral name]; // name in NULL in iOS 6
NSLog(@"%@", name);
for (NSString * key in advertisementData){
NSLog(@"%@", advertisementData[key]);
}
}
看起来您希望这个广告包可以像iBeacon一样解码,但事实并非如此。注释中列出的完整字节为:
ff ff 02 15 e8 4a 40 af 7b 8d e8 8d 4a 7b 40 af af e8 4a 40 40 af 7b 8d c3
02 15是苹果的公司代码,但接下来的两个字节e8 4a与您将看到的iBeacon模式不一致。因此,没有理由认为信标标识符编码在此数据包中
这些数据意味着什么?如果没有更多的关于什么软件或硬件正在传输这个数据包以及它的预期用途的信息,就不可能说。我们所能知道的是,这是一个制造商的广告(ff型),并报告自己是一个苹果设备
如果您想了解数据包的含义,需要确定哪个应用程序或硬件制造商正在发送数据包,并从该实体获取文档。
NSData*data=advertisementData[kCBAdvDataManufacturerData]
。现在,你想在上面提取/解码什么?你想要什么信息?包含一些数据,如。所以我想获取uuid:major:minor:1米处的测量功率(Tx功率):。。。。因此,我们必须将其解码成某种格式,我不知道如何解码。您可以使用subdataWithRange:
来隔离所需的数据。对于其余部分,这取决于如何将其翻译成NSData的文档(更复杂,等等)清理英语+formatting@Larme,这对我没有帮助。是的。通过这个,我只得到了内部adv数据kCBAdvDataManufacturerData。现在我的问题是,如何解码这些数据来访问这些信息。是的。他们这样告诉我。因此,我必须从中获取主次和Tx功率,以便计算BLE设备和手机之间的距离。所以我很困惑,如何分离这些数据以及转换成哪种格式?我认为你所描述的没有意义。在上面的示例中,02 15公司标识符后面的“类型(1字节)”将是0xe8,后面的“数据长度(1字节)”将是0x4a。这不可能是正确的。0x48是72位小数。数据包中没有72个字节。广告格式的此描述错误,或者该数据包字节序列不适用于与该描述匹配的数据包。否。这个数据是正确的。在安卓系统中,我们得到的数据正是我们想要的。在4个字节之后,16个字节是设备的MAC地址,我想从中找出,或者使用某种方法,我们必须转换它来访问它的数据。之后2个字节为主要字节,之后2个字节为次要字节。我也想找到那些。在安卓系统中,我们将这个十六进制数据字符串转换成十进制,这样我们就得到了它,但我不知道如何在ios中得到它\