gpt4 book ai didi

Swift NSData getBytes 逆转

转载 作者:行者123 更新时间:2023-11-28 06:38:50 32 4
gpt4 key购买 nike

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

我的问题是,在反转值后,当我将 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);
}

最佳答案

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

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

You identify the native format of the current platform using the CFByteOrderGetCurrent function. Use functions such as CFSwapInt32BigToHost and CFConvertFloat32HostToSwapped to convert values between different byte order formats.

关于Swift NSData getBytes 逆转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505091/

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