2016-08-19 103 views
0

我有以下數據Pyserial - Python的創建字節數組

A1 = 0x5A - 十六進制

A2 = 0×01 - 十六進制

A3 = 12 - 十進制

A4 = 28 - 十進制

A5 =的(A1至A4)總和

我應該能夠發送一個將這些信息放在一個字節數組中,並一次性使用ser.write命令發送。

目前,我手動轉換A3和A4爲十六進制,我使用這樣的事情ser.write('\ X5A \ X01 \ X \ X \ X ...)

我想辦法,我可以收拾所有的變量到一個單一的字節數組,並說ser.write(字節陣列)

SER ---是我serial.Serial(「COM1」)

同樣的,SER .read - 我得到的信息是字節數組 - 我如何解碼爲小數和十六進制

尋找用途的binascii函數用於轉換爲字節數組和從字節數組轉換回

回答

2

是否需要一串十六進制值?不確定要理解。

a1 = 0x5A # hex 
a2 = 0x01 # hex 
a3 = 12 # decimal 
a4 = 28 # decimal 
a5 = sum((a1, a2, a3, a4)) 

int_array = [a1, a2, a3, a4, a5] 
print(int_array) 

hex_array = "".join(map(hex, int_array)) 
print(hex_array) 

您將獲得:

[90, 1, 12, 28, 131] 
0x5a0x10xc0x1c0x83 

使用array類:

import array 

byte_array = array.array('B', int_array) 
print(byte_array) 
print(byte_array.tostring()) 

您將獲得:

array('B', [90, 1, 12, 28, 131]) 
b'Z\x01\x0c\x1c\x83' 
+0

不是一個十六進制值的字符串,但一個字節ARRAY。我可以用它來發送一個命令使用ser.write(bytearray) –

+0

''sum''溢出單個字節大小。並不總是可能的。 –

+0

0x5A應該是一個字節; 0x01應該是一個字節,12應該是一個字節......等等。我不必使用sum函數 –