私は次のコードを持っていますが、私は%0x%x
が次のコードの意味をよく知りませんか?C/C++プログラミングで%0x%xは何を意味しますか?
sprintf(buf, "pixel : %0x%x \n", gpbImageData[100]);
OutputDebugString(buf);
gpbImageData[100]
メモリ内の画像データを指しています。
私は次のコードを持っていますが、私は%0x%x
が次のコードの意味をよく知りませんか?C/C++プログラミングで%0x%xは何を意味しますか?
sprintf(buf, "pixel : %0x%x \n", gpbImageData[100]);
OutputDebugString(buf);
gpbImageData[100]
メモリ内の画像データを指しています。
あなたは確かに"0x%x"
sprintf(buf, "pixel : 0x%x \n", gpbImageData[100]);
このフォーマット文字列を意味し、彼らはbuf
で書かれているとき、これは16進数に0x
接頭辞を追加します。あなたはフラグ文字#
と同じことを達成することができます
注:
sprintf(buf, "pixel : %#x \n", gpbImageData[100]);
ありがとうございます:) – user261002
この例では、未定義の動作が発生します。 - 進数として値を印刷
%0x
%x
これらの両方が正確に同じことを意味:フォーマット文字列はsprint
2つのint
値を期待するようになります。しかし、あなたが示した呼び出しは1つの引数しか渡しません。
0x%x
とは言いませんか?もしそうでなければ、それはおそらく...普通であると考えられ、渡された値を接頭辞0x
の16進数として出力します。
あなたのコードは、警告が表示されるはずです。 clang
は与える:
example.c:5:15: warning: more '%' conversions than data arguments [-Wformat]
printf("%0x%x\n", 125987);
~^
1 warning generated.
とgcc
は言う:まったくのフラグを設けず
example.c: In function ‘main’:
example.c:5: warning: too few arguments for format
example.c:5: warning: too few arguments for format
両方。
正しいフォーマットがouahとして「0xを%X」であるとカールNorumが言いました。どのgpbImageData [100]の内容(ポインタまたは数値)でも、%xはその値を16進数で表示します。 0xは単なるテキストです。たぶん "gpbImageData"はポインタの配列です。
引数が実際にポインタの場合は、 '%p'を使用している必要があります。 –
http://www.cplusplus.com/reference/clibrary/cstdio/printf/をご覧ください。さらに質問がある場合は、尋ねてください。 –
+1 @OliCharlesworth。しかし、その変数の名前から 'gpbImageData'がポインタであることを賭けています。 –