a を 16 進数にマップするのと同じ方法でsprintf
a を 16 進数にマップする Cのフォーマット指定子はありますか?char
%x
int
2 に答える
はいといいえ。
sprintf
可変引数リストを取るため、すべての引数は受け取る前にデフォルトの昇格を受けsprintf
ます。つまり、 asprintf
は決して受信されませんchar
-- aは、それを受信する前にchar
常に昇格されます (および a will も同様です)。int
sprintf
short
はい、sprintf
受け取っているのは であるためint
、 を使用して 16 進形式に変換できます。値が、、またはで%x
始まっても同じように機能します。(よくあることですが) 入力ごとに 2 文字を出力したい場合は、 を使用できます。char
short
int
%2.2x
ただし、1 つの点に注意してください。あなたchar
が署名されていて、負の値で始まる場合、への昇格int
は同じ数値を生成します。通常、元の char と同じビット パターンにはならないため、(たとえば) char int が 32 ビットの場合、または64ビットの場合 (符号付き整数の典型的な 2 の補数表現を想定) は、-1
通常、値が 16 ビットであるffff
かのように出力されます。int
ffffffff
ffffffffffffffff
int
それは同じ%x
です。すべてのchar
値は、 (または可変数のパラメーターを取る他の関数)int
に渡される前に に変換されます。sprintf
printf("%x\n", 'a');
版画61