【问题标题】:python string.format and invalid \x escapepython string.format 和无效的 \x 转义
【发布时间】:2017-11-26 15:07:45
【问题描述】:

我正在尝试在 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,但我可以使用其他版本。)

谢谢

【问题讨论】:

    标签: python format escaping hex


    【解决方案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 字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多