89

ちょっとした質問があります。%x 書式指定子を使用して、書式文字列攻撃でスタックから値を読み取ることができることを知っています。

次のコードを見つけました。

%08x%08x%08x%08x

08 とはどういう意味ですか? 正確には何をしているのですか?ありがとう :)

4

5 に答える 5

155

壊す:

  • 8あなたは8桁を表示したいと言っています
  • 00空白の代わりに 'sを前に付けたい
  • x小文字の 16 進数で印刷します。

簡単な例 (Grijesh Chauhan に感謝):

#include <stdio.h>
int main() {
    int data = 29;
    printf("%x\n", data);    // just print data
    printf("%0x\n", data);   // just print data ('0' on its own has no effect)
    printf("%8x\n", data);   // print in 8 width and pad with blank spaces
    printf("%08x\n", data);  // print in 8 width and pad with 0's

    return 0;
}

出力:

1d
1d
      1d
0000001d

http://www.cplusplus.com/reference/cstdio/printf/も参照してください。

于 2013-02-27T09:53:49.630 に答える
7

%08xは、すべての数値が、欠落しているすべての桁をゼロで埋めて、少なくとも 8 文字幅で印刷する必要があることを意味します。たとえば、'1' の場合、出力は次のようになります。00000001

于 2013-02-27T09:53:41.440 に答える
2

これは、表示する桁数を指定します。

最小フィールド幅を指定する整数値または *。結果は、必要に応じてスペース文字 (デフォルト) でパディングされ、右寄せの場合は左に、左寄せの場合は右にパディングされます。* を使用する場合、幅は int 型の追加引数によって指定されます。引数の値が負の場合、- フラグが指定され、フィールド幅が正になります。

于 2013-02-27T09:52:29.883 に答える
2

http://en.wikipedia.org/wiki/Printf_format_stringから

width オプションが指定されている場合、スペースの代わりに 0 を使用してフィールドを埋めます。たとえば、printf("%2d", 3)結果は " 3" になり、printf("%02d", 3)結果は "03" になります。

于 2013-02-27T09:54:34.607 に答える