我无法将字符串转换为字节。
我尝试将十六进制格式的字符串('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
字符串/对象。你只是从它的控制台打印混淆。 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])