簡體   English   中英

在Python中將十六進制字符串轉換為字節時出現問題

[英]Problem converting hex string to Bytes in Python

我無法將字符串轉換為字節。

我嘗試將十六進制格式的字符串( '55 55 00 00' )轉換為字節,然后通過Pyserial發送這些字節,但是我發現字符串到字節轉換時出錯。 我的代碼是:

msg = '55 55 00 00'

bytes.fromhex(msg)

我預計結果應該是b'\\0x55\\0x55\\0x00\\0x00' ,為什么是結果
b'UU\\x00\\x00'

什么是UU

0x55與字母U的ASCII碼相同。 因此,Python做正確的事。 一種查看方式是:

b'\x55' == b'U'
True

您已將msg字符串正確轉換為Python 3的bytes字符串/對象。 您只是從其控制台打印中感到困惑。 字節對象實際上是一個短整數序列,盡管在可能的情況下將其內容打印為字符。

要檢查以下內容:

In [49]: msg = '55 55 00 00'
In [50]: values = bytes.fromhex(msg)
In [51]: values
Out[51]: b'UU\x00\x00' # U == \0x55 == 85
In [52]: values[0]
Out[52]: 85
In [53]: [value for value in values]
Out[53]: [85, 85, 0, 0]

注意:這里85 == 0x55可以打印為U

假設如果無法將某些內容打印為字符,則將其打印為轉義的十六進制值,請檢查以下內容:

In [54]: bytes("aÄBèC", sys.getdefaultencoding())
Out[54]: b'a\xc3\x84B\xc3\xa8C'

此外,要以所需的格式打印,您必須顯式編寫代碼以進行打印:-

"".join(["0x{:02x}".format(value) for value in values])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM