2017-06-08 40 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 

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