2017-06-08 2 views
0

Ich versuche, Daten aus zwei BLE-Eigenschaften Werte abzurufen. Beide enthalten Strukturen, und ich möchte diese Daten auch als Strukturen in meiner Anwendung speichern. Daten vom ersten BLE-Merkmal sind alle Int16, ich konnte es speichern. Aber das Problem ist, dass das zweite Merkmal Int8 & Int16 enthält, und ich kann keine Lösung finden, um damit umzugehen.Swift: Int16 & Int8 aus Daten extrahieren

In meiner Anwendung habe ich zwei verschiedene Strukturen für beide Merkmale erstellt. Die erste Struktur sieht so aus, es ist alles Int16.

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

Das zweite ist, wie das, hat zwei Arten:

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

}

Wenn ich Daten von characteristic.value für das erste Merkmal, ich bin in der Lage es so einfach tun :

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

Aber wie kann ich es für das 2. Merkmal tun? Derselbe Weg funktioniert nicht, weil er sowohl Int16 & Int8 als auch Fehler enthält. Ich könnte versuchen, alle Werte als Int16 zu interpretieren und dann zu Int8 zu konvertieren? Aber das ist wahrscheinlich eine schlechte Idee? Gibt es eine andere Möglichkeit, die Daten aus dem zweiten Merkmal zu extrahieren und in meine gewünschte Struktur zu bringen?

+0

Hilft dies https://stackoverflow.com/questions/39390211/how-to-convert-nsdata-to-multiple-type-ints? –

Antwort

0

Kann sein, dies wird Ihnen helfen:

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 

diesen Code verwenden, können Sie die Größe der empfangenen Werte überprüfen.