如何访问看起来像数组的 NSData

How to access NSData that looks like array

    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 在我显示它们时得到数字,尽管根据 dataArray 它们应该是 0.0。

我真的要开始翻表了,因为我已经解决了所有关于将 NSData 转换为 NSString、String、Integer、Decimal、Hex、Hex String、NSArray 的问题...没有什么能帮助我解决这个问题。

此外,当我每次尝试做类似

的事情时
xPos = round(filter(dataArray[1]))

我得到 0.0。有人可以帮我解决这个问题吗?非常感谢!

请不要引导我到另一个答案,我可以 99.999% 保证我已经看过或尝试过,即使是 objective-C 中写的那些。

你应该知道dataBytes数组的数据类型,然后你要进行相应的转换。 您可以更改以下数据类型 (UInt32) 并在 playground 中进行实验。

注意 - 我已经在 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)")
}