1
我做了一個應用程序與藍牙低能量設備通信。 基本上,我的應用程序和這個設備有自己的消息語法。它們以字節交換數據,並且數據中的每個值都相反。Swift NSData getBytes顛倒
我的問題是,在逆向返回值後,當我將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);
}
我不明白你的'getUInt32',你爲什麼要將本地值定義爲'Int32'而不是'UInt32'?另外,是否有可能只是在尋找'Int'類型所具有的'.bigEndian'和'.littleEndian'? – hnh
帶有UInt32的getBytes似乎有問題。我已經看到一些錯誤的值,並且這個問題沒有發生,因爲我是這樣轉換的。但也許我錯了。這就是我來這裏的原因。我希望它能正常工作:( – Kyu