Swift:16&;Int8来自数据
我正试图从两个可扩展的特征值中检索数据。它们都包含结构,我也想在我的应用程序中将这些数据保存为结构。来自第一个BLE特征的数据都是Int16,我能够保存它。但问题是第二个特性同时包含Int8和Int16,我找不到解决方案 在我的应用程序中,我为这两种特性创建了两种不同的结构。第一个结构看起来像这样,都是Int16Swift:16&;Int8来自数据,swift,pointers,characteristics,Swift,Pointers,Characteristics,我正试图从两个可扩展的特征值中检索数据。它们都包含结构,我也想在我的应用程序中将这些数据保存为结构。来自第一个BLE特征的数据都是Int16,我能够保存它。但问题是第二个特性同时包含Int8和Int16,我找不到解决方案 在我的应用程序中,我为这两种特性创建了两种不同的结构。第一个结构看起来像这样,都是Int16 struct FirstStruct { let a1: Int16 ... let a6: Int16 } 第二种是这样的,有两种类型:
struct FirstStruct {
let a1: Int16
...
let a6: Int16 }
第二种是这样的,有两种类型:
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]))
}
data=characteristic.value
让firstData=data.withUnsafeBytes{(int16Ptr:UnsafePointer)->中的FirstStruct
FirstStruct(a1:Int16(littleEndian:int16Ptr[0]),
...
a6:Int16(littleEndian:int16Ptr[5]))
}
但是第二个特征我该怎么做呢?同样的方法不起作用,因为它同时具有Int16和Int8,导致错误。我想,我可以尝试将所有值解释为Int16,然后转换为Int8?但这可能是个坏主意?是否有其他方法从第二个特征提取数据并将其放入我想要的结构中?可能这将帮助您:
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
使用此代码,您可以检查接收值的大小。这有帮助吗?