2016-04-28 5 views
-1

次のCコードがあります。Printfの16進数書式が間違った出力を導く

char a[] = "\x7f\x80"; 
printf("0x%02x\n",a[0]); 
printf("0x%02x",a[1]); 

私は次のようになっていますしかしそれは

0x7f 
0x80 
を印刷する必要がありますか?私は は0x80から0x7F出力 を取得するために行う必要がありどのような変更

0x7f 
0xffffff80 

おかげで、

+3

'(署名のない文字)a [1]' –

+0

ありがとう!私は実際にprintf( "0x%02x \ n"、(符号なし)a [0])を試しました。 –

+1

'" 0x%02hhx \ n "'を実行することもできます。 –

答えて

3

は、正しいタイプと変換指定子を使用する:

unsigned char a[] = "\x7f\x80"; 
printf("0x%02hhx\n",a[0]); 
printf("0x%02hhx",a[1]); 

変換指定xは、符号なしのタイプを必要とし、長さ修飾子hhunsigned charために使用されます。