我想通过python中的sockets把hex编码的数据发送到另一个客户端。前段时间我在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中那样再次转义字符串解吗?
谢谢
3条答案
按热度按时间oxf4rvwz1#
python3中的“str”对象不是字节序列,而是unicode代码点序列。
如果“发送数据”指的是调用
send
,那么bytes
就是正确的类型。如果您确实需要该字符串(不是3个字节,而是12个unicode码位):
请注意,为了在代码中表示反斜杠,需要使用双反斜杠。
yvgpqqbh2#
Python 2和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()
会为您做这件事。nnvyjq4y3#
为什么不用UTF-8编码,用套接字发送,再用UTF-8解码呢?