读书人

一个奇怪的输出有关问题

发布时间: 2013-12-02 12:00:40 作者: rapoo

一个奇怪的输出问题
以下是我的代码:

#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/

读书人网 >C语言

热点推荐