每次从二进制文件读取2个字节

时间:2013-03-01 00:12:57

标签: c binaryfiles

你好我试着完成我的项目,我很困惑从二进制文件读取字节。我的目标是每次读取2个字节,直到EOF。我想首先检查,第一个字节的第一个位0或1,我想打印出休息7位像整数。我也想把第二个字节打印成整数。所以我有这个

short test[2];
while((fread(&test,sizeof(short),1,ifp)!=0)  //ifp is input file pointer
    {
      fread(&test,sizeof(short),1,ifp);
      printf("test first byte :%d\n",test[0]);
      printf("test seocnd byte : %d\n",test[1];
}

我不知道即时读数是否正确而且我也无法弄清楚我将如何得到第一个字节的第一个位并且像整数一样休息7位如何打印输出第二个字节如整数。

日Thnx ..

2 个答案:

答案 0 :(得分:2)

第二个fread不是必需的,你不应该取一个数组的地址(没有&test),你也需要使用1字节的char类型:

unsigned char test[2];
while((fread(test,2,1,ifp) == 1)  //ifp is input file pointer
    {
      int first_bit = test[0] & 0x80;
      printf("test first byte 7 bits :%d\n", test[0] & 0x7f);
      printf("test second byte : %d\n",test[1];
}

答案 1 :(得分:1)

没有人保证short是2个字节,至少 2个字节。你正在阅读一个简短并使用它和下一个。像这样:

unsigned char test[2];
while((fread(&test, 1, 2, ifp) > 0) { //ifp is input file pointer
      printf("test first byte: %u, second byte: %u\n", test[0], test[1]);
}

一次读取两个字节,检查它读取的内容(返回值是读取的项目数),然后打印它们。