2017-11-26 5 views
3

Ich versuche, eine Zeichenfolge mit einigen \x innerhalb von Python zu formatieren.python string.format und ungültig x escape

Wenn ich:

print '\x00\x00\xFF\x00' 

es funktioniert gut und Druck . Aber wenn ich versuche, um die Zeichenfolge zu formatieren:

print '\x{}\x{}\x{}\x{}'.format('00','00','FF','00') 

ich diesen Fehler:

ValueError: invalid \x escape 

Das Problem, wenn ich die Flucht der umgekehrten Schrägstrich wie folgt aus:

print '\\x{}\\x{}\\x{}\\x{}'.format('00','00','FF','00') 

Er druckt:

\x00\x00\xFF\x00 

Und nicht das kleine wie die nicht formatierte Zeichenfolge.

chr und bytearray scheinen interessant zum Beispiel:

print chr(0x00),chr(0x00),chr(0xFF),chr(0x00) oder print bytearray([0x00, 0x00, 0xFF, 0x00])

druckt , aber wenn ich versuche, sie zu formatieren, erhalte ich eine Syntax.

fand ich einige interessante Beiträge mag:

Aber ich bin immer noch stecken ...

Wie eine formatierte Zeichenfolge mit \x innen drucken ?

(Ich verwende Python 2.7, aber ich kann eine andere Version.)

Danke

Antwort

1

Das Ziel ist es, ein Format-String zu erstellen, die Zeichen, da Stringdarstellungen von Hex-Werten gedruckt werden, dass entsprechen Unicode-Codepunkte, so dass so etwas wie dieses

for var1 in 'FF','00','38': 
    print '\x{}\x{}\x{}\x{}'.format(var1,'00','FF','00') 

ausgeben wird

�� � 8�

Der Trick besteht darin, den Hex-Wert zu ganzen Zahlen umzuwandeln, die int eingebaute Funktion verwendet wird, dann mit dem c String-Format-Code des ganzzahligen Wert zu dem entsprechenden Unicode-Zeichen zu konvertieren.

for v in ('ff', '00', '38'): 
    print '{:c}{:c}{:c}{:c}'.format(*[int(x, 16) for x in [v, '00', 'ff', '00']]) 

�� 
� 
8� 

Vom docs:

c : Character. Converts the integer to the corresponding unicode character before printing.