1

您好,我正在尝试完成我的项目,但我对从二进制文件中读取字节感到困惑。我的目标是每次读取 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 位,以及我如何打印出像整数一样的第二个字节。

谢谢。。

4

2 回答 2

3

第二个 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];
}
于 2013-03-01T00:18:32.110 回答
3

没有人保证 ashort是 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]);
}

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

于 2013-03-01T00:25:24.730 回答