str.zfill(x)
は、 `x文字より小さい文字列を返すことができることに気付きました。例:ゼロ埋め込みzfill関数のバグ?
>>> "%.2x".zfill(8) % 255
'0000ff'
>>> "%.2x".zfill(8) % 256
'0000100'
この奇妙な動作はどのように説明されますか?
str.zfill(x)
は、 `x文字より小さい文字列を返すことができることに気付きました。例:ゼロ埋め込みzfill関数のバグ?
>>> "%.2x".zfill(8) % 255
'0000ff'
>>> "%.2x".zfill(8) % 256
'0000100'
この奇妙な動作はどのように説明されますか?
動作は正しいです。 zfill(x)
自体は、少なくとも元の文字列と少なくとも同じ長さで少なくともx
文字の文字列を返します。 ff
は、あなたがより少ない文字で終わる%.2x
よりも短いので
>>> "%.2x" % 255
'ff'
:それは短い文字列で%.2f
を置き換えることによって、それをを短縮さ%
です。 %.2x
は手つかずのままと%
への以降の呼び出しはちょうどff
文字列を短くして、それを置き換えるあなたが見ることができるよう
>>> "%.2x".zfill(8)
'0000%.2x'
:
はzfill
は、このように、フォーマット指定子とについて何も知らないことに注意してください。
あなたはその後zfill
を呼び出す必要があり:
>>> "%08.2x" % 255
'000000ff'
0
は次のとおりです。
>>> ("%.2x" % 255).zfill(8)
'000000ff'
また
はあなたがzfill
callinf避けることができ、文字列フォーマットですべてをやっていることに注意してください文字列の幅は8
です。
サイドノート:8
の合計幅の両方を指定すると2
の精度は、実際に無駄です。 .2x
を指定するだけで効果が16
未満の数字の前に0
を追加することです:
>>> "%.2x" % 5
'05'
>>> "%.2x" % 10
'0a'
数字が大きくされている場合には効果がありません。
>>> "%.2x" % 16
'10'
>>> "%x" % 16
'10'
と8
ゼロとにかく0
が追加されるので、フォーマット指定子%08.2x
はちょうど%08x
に相当します。