如何从Swift中提取Int16数据
我一直在尝试访问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?
而不是一个CGFloat,在我的代码中我使用的结构:
struct MPUData { let x: Int16 let y: Int16 let z: Int16 }
并且正在接收来自特征的8字节值,其中前六个是x,y和z分量(即0x0D0E0F00
,其中x = 0x0D
, y = 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
- 如何在使用RTMPStreamPublisher发布video的同时在iPhone上存储video?
- 如何使用Objective C iOS从iPhone X的表视图顶部删除额外的空间
- 如何在iPhone SDK中获取Facebook相册的照片?
- 终止应用程序,由于未捕获的exception“NSRangeException”,原因:'*** – :索引2超出空NSArray的界限
- 从UICollectionViewCell传播自定义事件
- 点击像所有视图一样应该显示像目标C
- 如何调用super.super的方法?
- ios 8 UITableViewCell细节文本没有正确更新
- 为什么SKShapeNode没有定位点?