2017-06-08 6 views
0

J'essaie de récupérer des données à partir de deux valeurs de caractéristiques BLE. Ils contiennent tous les deux des structures et je souhaite également enregistrer ces données en tant que structures dans mon application. Les données de la première caractéristique BLE sont toutes Int16, j'ai pu le sauvegarder. Mais le problème est que la deuxième caractéristique contient à la fois Int8 & Int16, et je ne peux pas trouver une solution pour y faire face.Swift: Extraire Int16 & Int8 à partir des données

Dans mon application, j'ai créé deux structures différentes pour les deux caractéristiques. La première structure ressemble à ceci, tout est Int16.

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

Le second est comme ça, a 2 types:

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

}

Quand je reçois des données de characteristic.value pour la première caractéristique, je suis capable de faire tout simplement comme ça :

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

Mais comment puis-je le faire pour la 2ème caractéristique? De la même manière ne fonctionne pas, car il a Int16 & Int8, entraîne une erreur. Je suppose, je pourrais essayer d'interpréter toutes les valeurs comme Int16 et ensuite convertir en Int8? Mais c'est probablement une mauvaise idée? Existe-t-il un autre moyen d'extraire les données de la deuxième caractéristique et de les mettre dans ma structure désirée?

+0

Est-ce que cela aide https://stackoverflow.com/questions/39390211/how-to-convert-nsdata-to-multiple-type-ints? –

Répondre

0

Peut être cela vous aidera à:

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 

En utilisant ce code, vous pouvez vérifier la taille des valeurs reçues.