2015-01-07 25 views
1

我想通過TCP套接字發送字節信息。我有一個靜態字節是十六進制字0xaa。在靜態字節上,我需要連接動態字節,MSB始終爲0,然後我有6-4個可變的位(從000到100),比從3-0的位也是可變的(從0000 - 1000)。做這個的最好方式是什麼?我已經看到,我可以使用bitarrayBitArraybitstring但我想知道什麼是這個問題的最佳解決方案。此外,我需要知道如何將bitarray轉換回字節,以便我可以通過TCP發送它。什麼,我需要逐字節地形成字節並連接字節

例子:

leading_byte = 0xaa 
bit7 = 0 (bit) 

options = { 'a' : 000 (bits), 'b' : 001 ...} 
versions = { 'i' : 0000 (bits), 'i' : 0001 ...} 
bits6_4 = options['a'] 
bits3_0 = versions['i'] 

byte_message = leading_byte + bit7 + bit6_4 + bits3_0 

socket.send(byte_message) 

回答

2

使用bit轉換和普通chr

byte_message = chr(0xaa) + chr((bits6_4 << 4) | bits3_0) 
+0

謝謝!但如何獲得bits6_4作爲3位值,或bit7作爲signel位在Python? – sstevan

+0

@ user3599280:可以使用邏輯反向的東西來完成 - 使用'&'運算符應用位掩碼的'ord()'函數並向相反的方向移動。 – martineau

+0

謝謝。我發現這個解決方案更簡單bytes_version ['b'] second_byte = bitarray(snd)msg = leading_byte + second_byte.tobytes()' – sstevan