2017-06-08 42 views
0

我试图从两个BLE特征值中检索数据。它们都包含结构,我也希望将这些数据作为结构保存在我的应用程序中。来自第一个BLE特征的数据全部是Int16,我可以保存它。但问题是,第二个特征包含Int8 & Int16,我找不到解决方案。Swift:从数据中提取Int16和Int8

在我的应用程序中,我为这两个特性创建了两个不同的结构。第一个结构看起来像这样,都是Int16。

 struct FirstStruct { 
    let a1: Int16 
    ... 
    let a6: Int16 } 

第二就是这样,有2种类型:

 struct SecondStruct { 
    let b1: Int16 
    let b2: Int8 
    let b3: Int8 

}

当我从characteristic.value为第一特征数据,我可以简单地做这样的:

data = characteristic.value 
    let firstData = data.withUnsafeBytes {(int16Ptr: UnsafePointer<Int16>)-> FirstStruct in 
      FirstStruct(a1: Int16(littleEndian: int16Ptr[0]), 
         ... 
         a6: Int16(littleEndian: int16Ptr[5])) 
     } 

但我该如何做第二个特征?同样的方式不起作用,因为它同时具有Int16 & Int8,导致错误。我想,我可以尝试将所有值解释为Int16,然后转换为Int8?但这可能是一个坏主意?有没有其他方法可以从第二个特征中提取数据并将其放入我期望的结构中?

+0

这是否有帮助https://stackoverflow.com/questions/39390211/how-to-convert-nsdata-to-multiple-type-in​​ts? –

回答

0

可能,这将帮助你:

let a:Int8 = 1 
let b:Int16 = 1 
let aSize = MemoryLayout.size(ofValue:a) 
print(aSize) // will return 1 
let bSize = MemoryLayout.size(ofValue:b) 
print(bSize) // will return 2 

使用此代码,可以检查接收到的值的大小。