python-3.x 使用f字符串十六进制数字格式的奇怪行为?

hgqdbh6s  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(148)

我需要打印出两个带前导零的十六进制数字。我的原始代码是这样做的:

"<0x%08x 0x%08x>" % (x, y)

我试着用一个f字符串替换它:

f"<{x:#08x} {y:#08x}>"

但是当我用#的时候没有前导零。

# will insert 0x
0 should add leading zeroes
8 should make it 8 digits after the leading 0x
x will use lower-case hex

所以看起来'#'和指定宽度是不兼容的?
我期待着这样的东西:

x=0x600000
y=0x200000
print("<{x:#08x} {y:#08x}>")

将显示:

<0x00600000 0x00200000>

但实际结果是:

<0x600000 0x200000>
83qze16e

83qze16e1#

我相信0x字符是width的一部分。因此,在宽度说明符上加2。例如:

x=0x600000
y=0x200000
print(f"<{x:#010x} {y:#08x}>")

<0x00600000 0x200000>

相关问题