let dataBytes = characteristic.value
let dataLength = dataBytes.length
var dataArray = [Double](count: 4, repeatedValue: 0.0)
dataBytes.getBytes(&dataArray, length: dataLength)
func filter(acceleration : Double) -> Double{
dir = (acceleration * HIGHPASS_FILTER) + (dir * (1.0 - HIGHPASS_FILTER))
return Double(acceleration - dir)
}
xPos = filter(dataArray[1])
yPos = filter(dataArray[2])
zPos = filter(dataArray[3])
这是我的Swift代码。我的问题是dataBytes打印出来:
<5fb9f940 f940fe00 fe002000 2000>
<60b9f940 f940fe00 fe402000 2000>
<61b9f980 f980fe00 fe002000 2000>
<67b9f940 f980fe00 fe002000 2000>
<68b9f980 f980fe00 fe002000 2000>
但是dataArray打印出来:
[6.89325535931183e-304, 6.79049015671387e-313, 0.0, 0.0]
[123919.578362877, 6.79049015671387e-313, 0.0, 0.0]
[6.89325535931183e-304, 6.79049015671387e-313, 0.0, 0.0]
[6.89325535931183e-304, 6.79049015671387e-313, 0.0, 0.0]
[6.89325535931183e-304, 6.79049015671387e-313, 0.0, 0.0]
[6.89325622848131e-304, 6.79049015671387e-313, 0.0, 0.0]
我不明白为什么数组没有从NSData复制值,yPos和zPos在我显示它们时会得到数字,即使它们应该是0.0根据dataArray。
我真的要开始翻表,因为我已经完成了关于将NSData转换为NSString,String,Integer,Decimal,Hex,Hex String,NSArray的所有问题......没有什么能帮助我解决这个问题。
此外,每当我尝试做一些像
这样的事情时xPos = round(filter(dataArray[1]))
我得到0.0。任何人都可以帮我解决这个问题吗?我非常感激!
请不要指导我另一个答案,我可以99.999%保证我已经看过或尝试过,即使是用Objective-C写的。
答案 0 :(得分:0)
您应该知道dataBytes数组的数据类型,然后您必须相应地进行转换。 您可以更改以下数据类型(UInt32)并在游乐场中进行实验。
注意 - 我在Xcode 7 beta 4游乐场尝试了以下代码。
var arr : [UInt32] = [32,4,123,4,5,2];
let dataBytes = NSData(bytes: arr, length: arr.count * sizeof(UInt32))
// let dataBytes = characteristic.value
let dataLength = dataBytes.length
var dataArray = [UInt32](count: 4, repeatedValue: 0)
dataBytes.getBytes(&dataArray, length: dataLength)
let xPos = UInt32(dataArray[0])
let yPos = UInt32(dataArray[1])
let zPos = UInt32(dataArray[2])
print("\(xPos) \(yPos) \(zPos)");
对于多数据类型数组
import Foundation
var arr = [32,4,4,5,2,"KP"];
let dataBytes = NSData(bytes: arr, length: arr.count * sizeof(AnyObject))
// let dataBytes = characteristic.value
let dataLength = dataBytes.length
var dataArray = [AnyObject](count: 6, repeatedValue: 0)
dataBytes.getBytes(&dataArray, length: dataLength)
let xPos: (AnyObject) = dataArray[0]
let yPos: (AnyObject) = dataArray[1]
let zPos: (AnyObject) = dataArray[5]
print("\(xPos) \(yPos) \(zPos)");
您可以使用以下代码
来识别数据类型if let string = x as? String //Int,Float...
{
print("I'm a string: \(string)")
}