一个奇怪的输出问题
以下是我的代码:
#include <stdio.h>
void F(char *text, char *txt);
int main()
{
char text[16] = {0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,1};
char txt[2];
int i;
F(text, txt);
printf("%.2X %.2X\n", txt[0], txt[1]);
return 0;
}
/* **************************************
* 将16bits转化为8bytes
* **************************************/
void F(char *text, char *txt)
{
int i;
memset(txt, 0, 2);
for (i=0; i<16; i++){
txt[i>>3] |= (text[i] << (7 - (i % 8)));
}
}
输出结果应该为:0B C5
但是实际输出为:0B FFFFFFC5
这是怎么回事啊? C/C++ printf bit2byte
[解决办法]
改成unsigned char
[解决办法]
因为%x默认参数类型为unsigned int型,%.2x只是说最小精度为2,C5最高位是1,在char向int扩展的时候高位都置成1了,所以打印出的是FFFFFFC5.
格式化参数请参照http://www.cplusplus.com/reference/cstdio/printf/