首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个奇怪的输出有关问题

2013-12-02 
一个奇怪的输出问题以下是我的代码:#include stdio.hvoid F(char *text, char *txt)int main(){char te

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

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

热点排行