2016-09-30 4 views
0

Я хочу отправить шестнадцатеричные кодированные данные другому клиенту через сокеты в python. Мне удалось сделать все, что некоторое время назад в Python 2. Теперь я хочу портировать его на Python 3.Python 2 str.decode ('hex') в Python 3?

данных выглядит следующим образом:

""" 16 03 02 """ 

Тогда я использовал эту функцию, чтобы получить его в строку:

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

это будет выглядеть следующим образом (который является типом Обл, кстати):

'\x16\x03\x02' 

Теперь я Реагиров ред, чтобы найти это в 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

Объекты 'str' в python 3 - это не последовательности байтов, а последовательности кодов Unicode.

Если по запросу «отправить данные» вы имеете в виду позвонить send, тогда bytes подходит для использования.

Если вы действительно хотите строку (не 3 байта, но 12 баллов юникода кода):

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

Обратите внимание, что вам нужно удвоить слеш для того, чтобы представить их в коде.