2016-09-30 8 views
0

Ich möchte Hex-codierte Daten über Sockets in Python an einen anderen Client senden. Ich schaffte es alles, was vor einiger Zeit in Python zu tun 2. Nun möchte ich zu portieren 3.Python 2 str.decode ('hex') in Python 3?

Daten sieht wie folgt aus Python:

""" 16 03 02 """ 

Dann habe ich diese Funktion in eine Zeichenfolge zu erhalten:

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

Es sieht dann folgendermaßen aus (das ist eine Art str durch die Art und Weise ist):

'\x16\x03\x02' 

Jetzt habe ich manag ed dieses 3 in Python zu finden:

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

aber es gibt einen anderen Typ:

b'\x16\x03\x02' 

Und da alles, was ich kodieren keine richtige Sprache ist, kann ich nicht utf-8 oder einige Decoder verwenden, wie Darin sind ungültige Bytes (z. B. \ x00, \ xFF). Irgendwelche Ideen, wie ich die String-Lösung bekommen kann, sind wie in Python 2 wieder entflohen.

Dank

Antwort

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

Warum kodiert, nicht mit UTF-8, mit Sockel und Decodierung mit UTF-8 erneut zu senden?

0

'str'-Objekte in Python 3 sind keine Sequenzen von Bytes, sondern Sequenzen von Unicode-Codepunkten.

Wenn Sie "Daten senden" meinen, rufen Sie send, dann bytes ist der richtige Typ zu verwenden.

Wenn Sie wirklich die Zeichenfolge wollen (nicht 3 Bytes aber 12 Unicode-Code Punkte):

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

Beachten Sie, dass Sie benötigen Schrägstriche zu verdoppeln, um sie in Code zu repräsentieren.