ios - 如何从 Swift 3 中的数据中提取 Int16

标签 ios objective-c swift swift3

几天来,我一直在尝试访问 BLE 服务特征值中的数据。我想弄清楚如何翻译 Temperature Sensor Swift 的示例会有所帮助,但我被困在同一个地方。

我如何翻译 Obj-C:

- (CGFloat) maximumTemperature
{
    CGFloat result  = NAN;
    int16_t value   = 0;

    if (maxTemperatureCharacteristic) {
        [[maxTemperatureCharacteristic value] getBytes:&value length:sizeof (value)];
        result = (CGFloat)value / 10.0f;
    }
    return result;
}

到 Swift 3?

在我的代码中,我使用的不是 CGFloat,而是结构:

struct MPUData {
    let x: Int16
    let y: Int16
    let z: Int16
}

并且我从特征中接收到一个 8 字节的值,前六个是 x、y 和 z 分量(即 0x0D0E0F00,其中 x = 0x0Dy = 0x0E, z = 0x0F 最后一个字节未使用)

我不知道如何遍历这些位并将它们存储为它们的 Int16 值。任何帮助将不胜感激。

最佳答案

尝试使用withUnsafeBytes:

//Assuming `data` as `someCharacteristic.value!`
//Create 4 Int16 data in little endian
let data = Data(bytes: [0x0D, 0, 0x0E, 0, 0x0F, 0, 0, 0])

struct MPUData {
    let x: Int16
    let y: Int16
    let z: Int16
}
let mpuData = data.withUnsafeBytes {(int16Ptr: UnsafePointer<Int16>)->MPUData in
    MPUData(x: Int16(littleEndian: int16Ptr[0]),
        y: Int16(littleEndian: int16Ptr[1]),
        z: Int16(littleEndian: int16Ptr[2]))
}
print(mpuData.x,mpuData.y,mpuData.z) //->13 14 15

关于ios - 如何从 Swift 3 中的数据中提取 Int16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40273339/

相关文章:

iOS:推送通知在 iOS 10 中不显示词典信息

objective-c - Objective-C 中 @property 声明中的 "getter"关键字?

ios - 是否有一种 API 可以让人们通过 USB 将 iOS 应用程序与其 OSX 应用程序同步?

iphone - NSString 与\0

ios - 如何使云 Firestore 身份验证 Uid 与用户 ID 匹配?

ios - 返回主视图时,快速模糊效果不会消失

iOS 如何创建类似于 Twitter 心形按钮的动画按钮?

ios - 在 theos makefile 中找不到架构 arm64 的 AWSCore 框架

objective-c - 在 UIImageView 上使用 Zoomed Buttons 进行缩放

swift - 强制 swift 类的所有属性键和值都小写