2016-07-27 54 views
0

我需要創建一個設備,通過串行通信到不同的設備。很基本的東西。Python,正確的方式來制定二進制數據準備通過串行發送

但是,我需要做的是傳遞特定的二進制數據,設備將處理剩餘的數據。

數據必須採用二進制格式,我已經看到了通過互聯網進行數據傳輸的各種方式,但實際上不確定代表二進制數據的正確方式,而不是字符串。

這裏是什麼,我發現了幾個例子:

b'01001011' # Is this a packed string though? 
bytes(4) # This creates bytes. How do I manipulate the bits?, is this data able to send over serial? 
int('01001011', 2) # Will this be treated as an integer over serial? 
binascii.hexify() # This produces ASCII representation 

我需要制定的信息的幾個字節,這將涉及到我設置的某些位在每個字節,我搞糊塗瞭如何去它

回答

1

在python這個樣子的二進制文字:

>>> 0b11 
3 
>>> 0b10 
2 
>>> 0b100 
4 

你可以使用按位運算符位操作:

>>> 0b1000 
8 
>>> 0b1000 | 0b1 
9 

|只是or運營商。見其他運營商的位置:BitwiseOperators

要查看可以使用的String.Format數字的二進制表示:

>>> "{0:b}".format(9) 
'1001' 
>>> "{0:b}".format(65) 
'1000001' 
>>> "{0:b}".format(234) 
'11101010' 

編輯 爲例設定的特定的位:

# setting off second bit 
>>> bin(0b1100 & 0b1011) 
'0b1000' 
# setting on third bit 
>>> bin(0b1100 | 0b0010) 
0b1110' 

注意二進制文字給你一個int:

>>> type(0b1) 
<type 'int'> 
+0

好東西!然後有一個問題,是否可以創建一個字節的數據「0b00000000」,並操縱一個特定的位?也許按索引?此外,這是什麼數據類型,它只是一個int?或有點兒? – Harvey

+0

其數字a(int)。操縱位,你將不得不挖掘按位操作。我會在我的答案中加入一個「有點虛構」的例子。 – Lynch

相關問題