ios - CoreBluetooth 发现外设广告数据格式
<p><p>我正在使用 CoreBluetooth 发现 BLE 设备。
在</p>
<pre><code>- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
</code></pre>
<p>我收到 <code>advertisementData</code> 字典</p>
<pre><code>{
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = "Gate_02";
kCBAdvDataManufacturerData = <00ff0102 0303>;
}
</code></pre>
<p>如果我尝试读取 <code>advertisementData[@"kCBAdvDataManufacturerData"]</code> 类,我会获得 <code>_NSInlineData</code>。如何转换为 <code>NSString</code> 或 <code>NSData</code> 对象?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p><code>NSInlineData</code> <em>是</em> <code>NSData</code>。更具体地说,它是 <code>NSData</code> 的(私有(private))子类 - 它是 Cocoa 中的常见模式,称为 <a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/ClassClusters/ClassClusters.html" rel="noreferrer noopener nofollow">class cluster</a> . </p>
<p>所以你可以在 <code>NSInlineData</code> 的实例上使用 <code>NSData</code> 的所有方法。</p>
<p>我不确定“将 NSData 转换为 NSString”是什么意思。 <code>kCBAdvDataManufacturerData</code> 的值看起来不像 <code>NSString</code>(因为它的第一个字节是 <code>0x00</code>,通常用于终止字符串)。 </p>
<p>如果要将十六进制数据转换为十进制,则无需先将其转换为<code>NSString</code>。您可以逐字节迭代 <code>NSData</code>,如下所示:</p>
<pre><code>for(NSUInteger i = 0; i < data.length; ++i) {
Byte byte = 0;
;
//do something with byte
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - CoreBluetooth 发现外设广告数据格式,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/29946179/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/29946179/
</a>
</p>
页:
[1]