【发布时间】:2021-04-10 00:58:48
【问题描述】:
我希望从下面的代码中输出类似于\9b\d9\c0... 的内容,但我得到的是\ffffff9b\ffffffd9\ffffffc0\ffffff9d\53\ffffffa9\fffffff4\49\ffffffb0\ffff
ffef\ffffffd9\ffffffaa\61\fffffff7\54\fffffffb。我向 char 添加了显式转换,但它没有效果。这是怎么回事?
typdef struct PT {
// ... omitted
char GUID[16];
} PT;
PT *pt;
// ... omitted
int i;
for(i=0;i<16;i++) {
printf("\\%02x", (char) pt->GUID[i]);
}
编辑:只有投射到(unsigned char) 对我有用。编译器在使用 %02hhx (gcc -Wall) 时向我发出警告。 (unsigned int) 无效。
【问题讨论】:
-
这不是
%x把unsigned int当作论据吗? -
2中的数字%02始终指定字段中的最小位数。printf将使用最小的实现类型,unsigned int来打印值。这就是结果的原因。 -
你为什么要添加一个明确的演员表
char(你已经有了)?我认为(unsigned int)会更符合您的需求。