Python 2字符串解码('hex')在Python 3中?

bvuwiixz  于 2023-03-04  发布在  Python
关注(0)|答案(3)|浏览(113)

我想通过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中那样再次转义字符串解吗?
谢谢

oxf4rvwz

oxf4rvwz1#

python3中的“str”对象不是字节序列,而是unicode代码点序列。
如果“发送数据”指的是调用send,那么bytes就是正确的类型。
如果您确实需要该字符串(不是3个字节,而是12个unicode码位):

>>> import codecs
>>> s = str(codecs.decode('16ff00', 'hex'))[2:-1]
>>> s
'\\x16\\xff\\x00'
>>> print(s)
\x16\xff\x00

请注意,为了在代码中表示反斜杠,需要使用双反斜杠。

yvgpqqbh

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()会为您做这件事。

nnvyjq4y

nnvyjq4y3#

a = """ 16 03 02 """.encode("utf-8")
#Send things over socket
print(a.decode("utf-8"))

为什么不用UTF-8编码,用套接字发送,再用UTF-8解码呢?

相关问题