2017-06-08 2 views
0

2つのBLE特性値からデータを取得しようとしています。どちらも構造体を含んでいますが、私はこのデータを構造体としてアプリケーションにも保存したいと考えています。最初のBLE特性からのデータはすべてInt16で、私はそれを保存することができました。しかし問題は、第2の特性にInt8 & Int16の両方が含まれていることです。問題に対処するための解決策が見つかりません。Swift:データからInt16とInt8を抽出する

私のアプリケーションでは、両方の特性に対して2つの異なる構造を作成しました。最初の構造はこのように見えます、それはすべて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])) 
     } 

しかし、私は2番目の特性のためにどのようにすることができますか? Int16 & Int8の両方があるため、同じ方法ではエラーが発生します。私は、すべての値をInt16として解釈し、次にInt8に変換しようとする可能性があると思いますか?しかし、これはおそらく悪い考えですか? 2番目の特性からデータを抽出し、それを私の希望する構造に入れる別の方法はありますか?

+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 

このコードを使用すると、受信した値の大きさを確認することができます。

関連する問題