【问题标题】:Swift: Extracting Int16 & Int8 from DataSwift:从数据中提取 Int16 和 Int8
【发布时间】:2017-06-09 03:05:54
【问题描述】:

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

在我的应用程序中,我为这两个特征创建了两种不同的结构。第一个结构看起来是这样的,都是Int16。

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

第二种是这样的,有2种:

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

}

当我从第一个特征的特征值中获取数据时,我可以简单地这样做:

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

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

【问题讨论】:

标签: swift pointers characteristics


【解决方案1】:

也许这会对你有所帮助:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2015-10-17
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多