2016-09-30 1361 views
0

我想通过Python中的套接字将十六进制编码的数据发送到另一个客户端。我设法做的一切,前一段时间在Python 2。现在我想将它移植到Python 3Python 2 str.decode('hex')在Python 3中?

的数据是这样的:

""" 16 03 02 """ 

然后我用这个函数来得到它转换成字符串:

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

然后,它看起来是这样的(这是由方式类型STR):

'\x16\x03\x02' 

现在我MANAG编辑找到这个在Python 3:

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

但它返回另一种类型:

b'\x16\x03\x02' 

而且因为一切我编码是不正确的语言,我可以不使用UTF-8或某些解码器,如有无效的字节(例如\ x00,\ xFF)。有关我如何获得字符串解决方案的任何想法,就像在Python 2中一样再次逃脱?

感谢

回答

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

为什么不使用UTF-8编码,带插座发送和使用UTF-8解码再次?

0

python 3中的'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 

请注意,你需要以代表他们在代码中使用双反斜杠。