gpt4 book ai didi

ios - 从 BLE 提取 NSData 并将其转换为 Swift 中的 Float

转载 作者:可可西里 更新时间:2023-11-01 02:27:36 26 4
gpt4 key购买 nike

我正在开发一个处理蓝牙 SensorTag 的 IOS 应用程序。该 SensorTag 基于 TI BLE SensorTag,但我们移除了一些传感器。

在 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 objective-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 超出了 fescratchVal [0] 在 ObjectiveC 中大约是 64

但我的主要问题是,当我不得不开始这个项目时,我对 IOS 编程完全陌生,所以我选择使用 Swift 来学习和编写应用程序。

现在我使用 TI 的原始 Objective C 代码与我们的 SensorTag 一起使用,但我更愿意为应用程序中的每个部分使用 Swift。

最佳答案

在所有当前的 iOS 和 OS X 平台上,char 是一个signed 数量,以便输入 fe 被视为负数。

另一方面,

ByteUInt8 的别名,未签名。使用 [Int8] 数组来获得与 Objective-C 代码中相同的行为。

关于ios - 从 BLE 提取 NSData 并将其转换为 Swift 中的 Float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26326415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com