繁体   English   中英

如何在Swift 3中从数据中提取Int16

[英]How to extract Int16 from Data in Swift 3

几天来,我一直在尝试访问BLE服务特征值中的数据。 我认为弄清楚如何将“ 温度传感器”示例转换为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?

在我的代码中,我使用了struct而不是CGFloat:

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

并且正在从特性接收8字节值,其中前六个是x,y和z分量(即0x0D0E0F00 ,其中x = 0x0Dy = 0x0Ez = 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM