【问题标题】:Problem converting hex string to Bytes in Python在 Python 中将十六进制字符串转换为字节的问题
【发布时间】:2019-08-19 00:44:36
【问题描述】:

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

我尝试将十六进制格式的字符串 ('55 55 00 00') 转换为字节并通过 Pyserial 将这些字节发送出去,但我发现字符串到字节的转换出错。我的代码是:

msg = '55 55 00 00'

bytes.fromhex(msg)

我预计结果应该是b'\0x55\0x55\0x00\0x00',为什么是结果
b'UU\x00\x00'

UU 是什么?

【问题讨论】:

  • chr(0x55) = 'U'...
  • 确实;如果字节不是可打印的 ASCII 字符,Python 只会将字节打印为十六进制序列。

标签: python python-3.x hex


【解决方案1】:

0x55 与字母 U 的 ASCII 码相同。所以 Python 正在做正确的事情。 看到这一点的一种方式是:

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

【讨论】:

  • 谢谢大家,我明白了
【解决方案2】:

您已正确地将 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])

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2012-06-05
    • 2023-03-07
    • 2022-06-18
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2018-08-09
    相关资源
    最近更新 更多