Swift NSData getBytes发生逆转

时间:2016-07-21 13:05:31

标签: swift nsdata

我制作了一款应用与低功耗蓝牙设备通信的应用。 基本上,我的应用程序和此设备有自己的消息语法。它们以字节形式交换数据,并且数据中的每个值都相反。

我的问题是,在反转返回值后,当我将3字节值转换为Int32时,NSData.getBytes函数似乎会反转该值,因此我的值有误。例如:

var value; // containing [ 0x01, 0xD3, 0x00 ]
value = value.reverse(); // Reverse back : [ 0x00, 0xD3, 0x01 ]
let numb = value.getUInt32(); // Numb will be 119552, instead of 54017...

我不知道我的问题是否清晰,但这是我的代码。一种反向数据然后尝试将数据转换为int的函数。

// Those functions are in an extension of NSData
func getRUInt32(range:NSRange) -> UInt32
{
    var data = message.subdataWithRange(range); // Extract data from main message
    data = data.reverse(); // Reverse back data
    return data.getUInt32(); // Convert to UInt32
}

func getUInt32() -> UInt32
{
    var value:Int32 = 0;
    getBytes(&value, length: self.length);
    return UInt32(value);
}

func reverse() -> NSData
{
    let count:Int = length / sizeof(UInt8);
    var array = [UInt8](count: count, repeatedValue: 0);
    getBytes(&array, length: count * sizeof(UInt8));

    var reversedArray = [UInt8](count: count, repeatedValue: 0);
    for index in 0..<array.count
    {
        reversedArray[index] = array[array.count - index - 1];
    }

    return NSData(bytes: reversedArray, length: reversedArray.count);
}

1 个答案:

答案 0 :(得分:1)

您应该查看字节顺序实用程序参考:

https://developer.apple.com/library/ios/documentation/CoreFoundation/Reference/CFByteOrderUtils/index.html#//apple_ref/c/func/CFConvertDoubleHostToSwapped

  

使用。识别当前平台的本机格式   CFByteOrderGetCurrent函数。使用诸如的功能   CFSwapInt32BigToHost和CFConvertFloat32HostToSwapped转换   不同字节顺序格式之间的值。