我想通过 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 许可协议
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()
会为你做。