すべての答えを見ると、おそらくこれを行う別の方法が欠けていると思います。
const unsigned char chararr[]="abceXYZ";
for (int i=0; i< 7; ++i) {
printf("%#04X %d %c\n", chararr[i], chararr[i], chararr[i]);
}
0X61 97 a
0X62 98 b
0X63 99 c
0X65 101 e
0X58 88 X
0X59 89 Y
0X5A 90 Z
%#04x small xを使用すると、出力はb 0xsmallxプレフィックスになります。#ポンド記号は、0xを出力するように関数に指示します。04は出力する桁数を指示します。入力が「0x0a」の場合はこれを出力し、04がない場合は「0xa」を出力します。
私のコンピュータであるDellワークステーションでは、出力は質問で期待どおりです。そうでもなければ
unsigned char status = 0x00;
printf("status = (0x%02X)\n\r", (status |= 0xC0));
// output
//status = (0xC0)
// is exactly expected by the original question.
例でよりよく説明されています:
37 printf("status = (%#02x)\n", (status |= 0xC0));
38 printf("status = (%#04x)\n", (status |= 0xC0));
39 printf("status = (%#04x)\n", 0x0f);
40 printf("status = (%#02x)\n", 0x0f);
status = (0xc0)
status = (0xc0)
status = (0x0f)
status = (0xf)