我试图在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
而不是像未格式化的字符串那样的小�
。
chr
和bytearray
似乎很有趣,例如:
print chr(0x00),chr(0x00),chr(0xFF),chr(0x00)
或print bytearray([0x00, 0x00, 0xFF, 0x00])
打印�
,但是当我尝试格式化它们时,我得到一个SyntaxError。
我发现了一些有趣的帖子:
但我仍然坚持......
如何打印内置\x
的格式化字符串?
(我使用python 2.7,但我可以使用其他版本。)
谢谢
答案 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字符。