【发布时间】:2014-12-07 05:12:04
【问题描述】:
我正在开发一个处理蓝牙 SensorTag 的 IOS 应用程序。 该 SensorTag 基于 TI BLE SensorTag,但我们删除了一些 Sensor。
在 TI 的原始 IOS 应用程序的源代码中,XYZ 值的计算如下 在我的实现中,KXTJ9_RANGE 定义为 1.0,KXTJ9 是建立在 SensorTag 上的加速度计
+(float) calcXValue:(NSData *)data {
char scratchVal[data.length];
[data getBytes:&scratchVal length:3];
return ((scratchVal[0] * 1.0) / (64 / KXTJ9_RANGE));
}
数据像“fe850d”一样是十六进制的,通过该方法将被分成3部分。 现在我正在尝试将此方法转换为 swift,但我得到了错误的数字
例如fe 应该返回 0.02 目标 C 代码所做的事情
到目前为止我的 Swift 代码
class Sensor: NSObject {
let Range: Float = 1.0
var data: NSData
var bytes: [Byte] = [0x00, 0x00, 0x00]
init(data: NSData) {
self.data = data
data.getBytes(&bytes, length: data.length)
}
func calcXValue()->Float {
return ((Float(bytes[0]) * 1.0) / (64.0 / Range))
}
...
}
我相信问题一定出在我的Float(bytes[0]) 周围,因为这使得254 脱离fe 而ObjectiveC 中的scratchVal[0] 大约是64
但我的主要问题是,当我不得不开始这个项目时,我对 IOS 编程完全陌生,所以我选择使用 Swift 来学习和编写应用程序。
现在我使用来自 TI 的原始 Objective C 代码与我们的 SensorTag 一起使用,但我更喜欢在应用程序的每个部分使用 Swift。
【问题讨论】:
-
char是一个 signed 数量,而Byte是 unsigned。尝试改用[Int8]数组。 -
谢谢,这就是区别 =)
标签: ios swift floating-point type-conversion nsdata