我正在尝试在python中使用套接字库将两个十六进制数字的字节发送到一个被编程接受它们的硬件。要从用户输入十六进制数字的字符串创建字节,我正在尝试使用这里描述的bytes.fromhex()类方法:https://docs.python.org/dev/library/stdtypes.html#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 :(得分:2)
这与bytes.fromhex()
无关。如果您将预期结果输入Python,您将得到相同的结果:
>>> b'\xbb\x0d\x02\x55\x55\x5a\xce'
b'\xbb\r\x02UUZ\xce'
repr()
对象的bytes
表示将始终使用ASCII可打印字符和尽可能短的单字母转义序列。
因此\x0d
显示为\r
,因为这是回车的ASCII代码点。 \x55
是可打印的ASCII字符U
等。
如果这对您来说是个问题,则必须再次将bytes
值明确转换为十六进制:
>>> b'\xbb\r\x02UUZ\xce'.hex()
'bb0d0255555ace'
答案 1 :(得分:0)
Python会自动显示可以解释为可打印ASCII的字节作为打印的字符。例如,chr(0x55) == 'U'
,因此Python只打印U而不是十六进制代码。它仍然是相同的数据。