Python 3 中的 Python 2 str.decode('hex')?

新手上路,请多包涵

我想通过 python 中的套接字将十六进制编码的数据发送到另一个客户端。我前段时间在 python 2 中设法完成了所有事情。现在我想将它移植到 python 3。

数据如下所示:

 """ 16 03 02 """

然后我用这个函数把它变成一个字符串:

 x.replace(' ', '').replace('\n', '').decode('hex')

然后它看起来像这样(顺便说一句,这是一个类型 str ):

 '\x16\x03\x02'

现在我设法在 python 3 中找到它:

 codecs.decode('160302', 'hex')

但它返回另一种类型:

 b'\x16\x03\x02'

由于我编码的所有内容都不是正确的语言,我不能使用 utf-8 或某些解码器,因为其中有无效字节(例如 \x00、\xFF)。关于如何像在 python 2 中一样再次转义字符串解决方案的任何想法?

谢谢

原文由 J.Blond86 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 947
1 个回答

Python2和Python3都有标准的解决方案。无需进口: hex_string = """ 16 03 02 """ some_bytes = bytearray.fromhex(hex_string)

在 python3 中,您可以将其视为 str (对其进行切片、迭代等),也可以添加字节串: b'\x00'b'text'bytes('text','utf8')

您还提到了有关编码“utf-8”的内容。所以你可以很容易地做到这一点: some_bytes.encode()

如您所见,您不需要清洁它。这个功能非常有效。如果你想返回十六进制字符串: some_bytes.hex() 会为你做。

原文由 Rutrus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进