在Python中将十六进制字符串转换为字节时出现问题

在Python中将十六进制字符串转换为字节时出现问题,python,python-3.x,hex,Python,Python 3.x,Hex,我无法将字符串转换为字节 我尝试将十六进制格式的字符串('55 55 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

我无法将字符串转换为字节

我尝试将十六进制格式的字符串(
'55 55 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

0x55
与字母
U
的ASCII码相同。因此Python正在做正确的事情。 一种方法是:

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

您已经将
msg
字符串正确地转换为Python 3的
字节
字符串/对象。你只是从它的控制台打印混淆字节对象实际上是一个短整数序列,但尽可能将其内容打印为字符。

要查看以下内容:

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]
In [54]: bytes("aÄBèC", sys.getdefaultencoding())
Out[54]: b'a\xc3\x84B\xc3\xa8C'
注意:此处的
85==0x55
可以打印为
U

假设某个内容不可能打印为字符,则该内容将打印为转义十六进制值,检查如下:

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]
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])

您已经将
msg
字符串正确地转换为Python 3的
字节
字符串/对象。你只是从它的控制台打印混淆字节对象实际上是一个短整数序列,但尽可能将其内容打印为字符。

要查看以下内容:

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]
In [54]: bytes("aÄBèC", sys.getdefaultencoding())
Out[54]: b'a\xc3\x84B\xc3\xa8C'
注意:此处的
85==0x55
可以打印为
U

假设某个内容不可能打印为字符,则该内容将打印为转义十六进制值,检查如下:

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]
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])

chr(0x55)=“U”
…确实如此;Python仅在字节不是可打印的ASCII字符时才将其打印为十六进制序列;Python只将字节打印为十六进制序列,如果它们不是可打印的ASCII字符。谢谢大家,我明白了谢谢大家,我明白了