从所有的答案来看,我认为我们可能还缺少另一种解决方法。
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小写x,则输出将带有0x小写x前缀。#号告诉函数打印0x。 04指示要输出的数字位数,如果输入为“0x0a”,则会打印此内容,没有04则会打印“0xa”。
在我的戴尔工作站上,输出与问题所期望的相同。除非...
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)
|=
赋值移动到printf()
之前的单独语句中会发生什么?如果结果改变了,那么你可能需要处理一个编译器错误。你在哪个平台(操作系统)上使用哪个编译器的哪个版本? - Jonathan LefflerC编译器:C51.Exe V9.01 汇编器:A51.Exe V8.02 链接器/定位器:BL51.Exe V6.22 库管理员:LIB51.Exe V4.24 十六进制转换器:OH51.Exe V2.6 CPU DLL:S8051.DLL V3.72 对话框DLL:DP51.DLL V2.59 - Asad Waheed
status = (0xC0)
。你确定那段代码就是你程序中完全相同的吗?请编写一个小的自包含程序(包含#include <stdio.h>
和main()
函数的完整定义),并将其与你的输出一起展示给我们。请复制粘贴它们,不要重新输入。 - Keith Thompsonunsigned char status = 0x00; status |= 0xC0; printf("0x%02X\r\n", status);
?还有这个:int st_pr; unsigned char status = 0x00; status |= 0xC0; st_pr = status & 0xFF; printf("0x%02X\r\n", st_pr);
?如果你把格式改成%d
呢?你有包含<stdio.h>
吗? - Jonathan Leffler