2017-07-31 52 views
-1

我正在從一個特徵uuid和另一個特徵uuid的8位數據兩個特徵即8位數據以8位數據的形式發送值的藍牙項目。如何添加兩個8位數據形成一個16位數據?

我需要考慮的第一個8位數據是最重要的字節,第二個8位數據是最不重要的字節。

現在我需要將它們結合成一個16位的值並顯示結果。

我是新來的快速位和字節轉換。

請幫我一把。

在此先感謝。

+1

[轉換一個兩個字節的UINT8數組中夫特一個UINT16]可能的複製(HTTPS:/ /stackoverflow.com/questions/25267089/convert-a-two-byte-uint8-array-to-a-uint16-in-swift) –

回答

2
let mostSignificantByte: UInt8 = 0x01 
let leastSignificantByte: UInt8 = 0x02 

let twoByteInteger = (UInt16(mostSignificantByte) << 8) | UInt16(leastSignificantByte) 

// twoByteInteger is 0x0102 
+0

謝謝。這裏你提到mostSignificantByte:UInt8 = 0x01表示1且最少SignificantByte:UInt8 = 0x02表示2,結果值爲0x0102表示258。請你告訴我它是如何工作的。 –

+0

0x01和0x02是佔位符值;用你的八位數值代替那些。至於代碼在做什麼: UInt16(x)只是將8位整數轉換爲16位整數。所以0x01變成0x0001。 <<是左移位運算符。它向左「推」一些位數的值。在這種情況下,我將它向左移8位,所以0x0001變成0x0100。 而|,當然,還是把兩個值合在一起。所以,0x0100 | 0x0002 == 0x0102。 因此,我已經將兩個8位整數合併爲一個16位整數。 –

+0

抱歉,我正在以[UInt8]格式的形式獲取值。如果我嘗試使用上面的公式,我得到一個錯誤。請幫助我。 –

1

夫特3X和Xcode的8.0

let byte1: UInt8 = 0x01 
    let byte2: UInt8 = 0x02 
    let bit16 = UnsafePointer([byte1,byte2]).withMemoryRebound(to: UInt16.self, 
                capacity: 1) { 
                 $0.pointee 
    } 
    print(bit16) // 513 

你可以去here更詳細

+0

如果您認爲在此之前已經提出並回答了一個問題,那麼您可以將它標記爲重複。沒有必要重複現有的答案。 –

+0

@MartinR請你注意複製問題。我沒有權限標記問題重複 –

+0

我從一個像這樣[1,0,0,0]即[UInt8],但在外設我得到值0x01相同的第二個0x02我收到[2,0 ,0,0]。現在我怎樣才能將這些值組合成一個16位。 –

相關問題