2013-07-11 160 views
6

我知道已經有很多的討論,但我仍然有一個問題。我試圖用通過pyserial發送十六進制值到我的設備pyserial使用pyserial發送二進制數據

command="\x89\x45\x56" 
ser.write(command) 

不過,我不斷收到一個錯誤說string argument without encoding.有誰知道如何解決這個問題?

+0

爲什麼不使用'binascii'? '從binascii進口unhexlify',然後'命令= unhexlify( 「894556」)' – TyrantWave

+0

Python版本您使用的?什麼是完整的回溯模樣? – jszakmeister

回答

1

如果這是Python 3中,它可能對待你的字符串作爲unicode的,不知道該如何改造它。我想你大概的意思在這裏使用的字節:

command=b"\x89\x45\x56" 
1

如果你使用Python 3,你可以使用一個bytes對象。

command=b"\x89\x45\x56" 

從錯誤它看起來像pyserial試圖將(你的)字符串轉換爲一個字節對象,而不指定編碼。

1

我已經成功從一個字符串像這樣發送的十六進制值:

input = '736e7000ae01FF'  
ser.write(input.decode("hex")) 
print "sending",input.decode("hex") 

>> sending snp «☺  
0
packet = bytearray() 
packet.append(0x41) 
packet.append(0x42) 
packet.append(0x43) 

ser.write(packet)