2016-12-05 79 views
0

我想在Python中使用套接字庫發送兩個十六進制數字的字節到一個硬件編程接受它們。要創建的十六進制數字用戶inputed字符串的字節數,我試圖用bytes.fromhex()這裏所描述類方法:https://docs.python.org/dev/library/stdtypes.html#bytes.fromhex爲什麼bytes.fromhex()奇怪地處理一些十六進制值?

爲什麼如下:

hexstring = "bb 0D 02 55 55 5A ce" 
data = bytes.fromhex(hexstring) 
print(data) 

給我:

b'\xbb\r\x02UUZ\xce' 

代替:

b'\xbb\x0d\x02\x55\x55\x5a\xce' 

我該如何讓它給我第二個輸出?我正在使用python 3.5。

+0

''\ x55''是可打印的ASCII字符''U'',''\ x5A''是可打印的ASCII字符''Z'',''\ x0D''是通常由轉義字符串''\ r''表示的ASCII字符。如果你想要一個字符串顯示''\ x ..''唯一格式,其中十六進制代碼對於每個字符都是明確可見的,那麼......你已經有了'hexstring'。不要擔心Python控制檯顯示輸出字符串的方式 - 它可能更重要的是處理它的內容,並擔心它在任何系統上的顯示方式。 – jez

回答

1

這與bytes.fromhex()無關。你會得到同樣的結果,如果你輸入了預期的結果成Python:

>>> b'\xbb\x0d\x02\x55\x55\x5a\xce' 
b'\xbb\r\x02UUZ\xce' 

一個bytes對象,其中可能會一直使用ASCII可打印字符和短單字母的轉義序列repr()表示。

因此\x0d顯示爲\r,因爲這是回車的ASCII代碼點。 \x55可打印的ASCII字符U

如果這是你的問題,你必須明確地轉換您bytes值再次十六進制:

>>> b'\xbb\r\x02UUZ\xce'.hex() 
'bb0d0255555ace' 
+0

謝謝。我意識到,儘管使用ASCII可打印字符和單字母轉義序列顯示它的方式,它仍然以我需要的方式傳輸。 – Jim

0

Python會自動顯示可被解釋爲可打印ASCII的字節,作爲它們打印的字符。例如,chr(0x55) == 'U',所以Python只是打印U而不是十六進制代碼。它仍然是相同的數據。

相關問題