我正在從一個特徵uuid和另一個特徵uuid的8位數據兩個特徵即8位數據以8位數據的形式發送值的藍牙項目。如何添加兩個8位數據形成一個16位數據?
我需要考慮的第一個8位數據是最重要的字節,第二個8位數據是最不重要的字節。
現在我需要將它們結合成一個16位的值並顯示結果。
我是新來的快速位和字節轉換。
請幫我一把。
在此先感謝。
我正在從一個特徵uuid和另一個特徵uuid的8位數據兩個特徵即8位數據以8位數據的形式發送值的藍牙項目。如何添加兩個8位數據形成一個16位數據?
我需要考慮的第一個8位數據是最重要的字節,第二個8位數據是最不重要的字節。
現在我需要將它們結合成一個16位的值並顯示結果。
我是新來的快速位和字節轉換。
請幫我一把。
在此先感謝。
let mostSignificantByte: UInt8 = 0x01
let leastSignificantByte: UInt8 = 0x02
let twoByteInteger = (UInt16(mostSignificantByte) << 8) | UInt16(leastSignificantByte)
// twoByteInteger is 0x0102
謝謝。這裏你提到mostSignificantByte:UInt8 = 0x01表示1且最少SignificantByte:UInt8 = 0x02表示2,結果值爲0x0102表示258。請你告訴我它是如何工作的。 –
0x01和0x02是佔位符值;用你的八位數值代替那些。至於代碼在做什麼: UInt16(x)只是將8位整數轉換爲16位整數。所以0x01變成0x0001。 <<是左移位運算符。它向左「推」一些位數的值。在這種情況下,我將它向左移8位,所以0x0001變成0x0100。 而|,當然,還是把兩個值合在一起。所以,0x0100 | 0x0002 == 0x0102。 因此,我已經將兩個8位整數合併爲一個16位整數。 –
抱歉,我正在以[UInt8]格式的形式獲取值。如果我嘗試使用上面的公式,我得到一個錯誤。請幫助我。 –
夫特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更詳細
如果您認爲在此之前已經提出並回答了一個問題,那麼您可以將它標記爲重複。沒有必要重複現有的答案。 –
@MartinR請你注意複製問題。我沒有權限標記問題重複 –
我從一個像這樣[1,0,0,0]即[UInt8],但在外設我得到值0x01相同的第二個0x02我收到[2,0 ,0,0]。現在我怎樣才能將這些值組合成一個16位。 –
[轉換一個兩個字節的UINT8數組中夫特一個UINT16]可能的複製(HTTPS:/ /stackoverflow.com/questions/25267089/convert-a-two-byte-uint8-array-to-a-uint16-in-swift) –