3

a を 16 進数にマップするのと同じ方法でsprintfa を 16 進数にマップする Cのフォーマット指定子はありますか?char%xint

4

2 に答える 2

9

はいといいえ。

sprintf可変引数リストを取るため、すべての引数は受け取る前にデフォルトの昇格を受けsprintfます。つまり、 asprintf決して受信されませんchar-- aは、それを受信する前にchar常に昇格されます (および a will も同様です)。intsprintfshort

はい、sprintf受け取っているのは であるためint、 を使用して 16 進形式に変換できます。値が、、またはで%x始まっても同じように機能します。(よくあることですが) 入力ごとに 2 文字を出力したい場合は、 を使用できます。charshortint%2.2x

ただし、1 つの点に注意してください。あなたcharが署名されていて、負の値で始まる場合、への昇格intは同じ数値を生成します。通常、元の char と同じビット パターンにはならないため、(たとえば) char int が 32 ビットの場合、または64ビットの場合 (符号付き整数の典型的な 2 の補数表現を想定) は、-1通常、値が 16 ビットであるffffかのように出力されます。intffffffffffffffffffffffffint

于 2012-10-03T03:24:50.090 に答える
7

それは同じ%xです。すべてのchar値は、 (または可変数のパラメーターを取る他の関数)intに渡される前に に変換されます。sprintf

printf("%x\n", 'a');

版画61

于 2012-10-03T03:13:55.430 に答える