Swift:提取Int16&来自Data的Int8

时间:2017-06-08 14:27:25

标签: swift pointers characteristics

我正在尝试从两个BLE特征值中检索数据。它们都包含结构,我想将这些数据保存为我的应用程序中的结构。来自第一个BLE特征的数据都是Int16,我能够保存它。但问题是第二个特征包含Int8和& Int16,我无法找到解决方案。

在我的应用程序中,我为这两个特性创建了两种不同的结构。第一个结构看起来像这样,它都是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]))
        }

但我怎么能为第二个特征做到这一点?同样的方式不起作用,因为它同时具有Int16和&amp; Int8,导致错误。我想,我可以尝试将所有值解释为Int16然后转换为Int8?但这可能是一个坏主意?是否有其他方法可以从第二个特征中提取数据并将其放入我想要的结构中?

1 个答案:

答案 0 :(得分: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

使用此代码,您可以检查收到的值的大小。