python string.format和invalid \ x escape

时间:2017-11-26 15:07:45

标签: python format escaping hex

我试图在python中格式化一些\x内部的字符串。

当我使用时:

print '\x00\x00\xFF\x00'

效果很好并打印。但是当我尝试格式化字符串时:

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

我收到此错误:

ValueError: invalid \x escape

当我像这样逃避反斜杠时的问题:

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

打印:

\x00\x00\xFF\x00

而不是像未格式化的字符串那样的小

chrbytearray似乎很有趣,例如:

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

打印,但是当我尝试格式化它们时,我得到一个SyntaxError。

我发现了一些有趣的帖子:

但我仍然坚持......

如何打印内置\x的格式化字符串?

(我使用python 2.7,但我可以使用其他版本。)

谢谢

1 个答案:

答案 0 :(得分:1)

目标是创建一个格式字符串,它将打印字符,给定与unicode代码点对应的十六进制值的字符串表示,以便像这样的

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

将输出

�� � 8�

诀窍是使用int内置函数将十六进制值转换为整数,然后使用c字符串格式代码将整数值转换为相应的unicode字符。

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

�� 
� 
8�

来自docs

  

c:性格。在打印之前将整数转换为相应的unicode字符。