3

I'm trying to format a string with some \x inside in python.

When I use:

print '\x00\x00\xFF\x00'

it works nicely and print . But when I try to format the string:

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

I get this error:

ValueError: invalid \x escape

The problem when I escape the backslash like this:

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

It prints:

\x00\x00\xFF\x00

And not the little like the non-formatted string.

chr and bytearray seem interesting for example:

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

prints , but when I try to format them, I get a SyntaxError.

I found some interesting posts like:

But I'm still stuck...

How to print a formatted string with \x inside?

(I'm using python 2.7 but I can use an other version.)

Thank you

grrr
  • 151
  • 11

1 Answers1

1

The objective is to create a format string that will print characters, given string representations of hex values that correspond to unicode code points, so that something like this

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

will output

�� � 8�

The trick is to convert the hex values to integers, using the int builtin function, then use the c string format code to convert the integer value to the corresponding unicode character.

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

�� 
� 
8�

From the docs:

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

snakecharmerb
  • 47,570
  • 11
  • 100
  • 153