1

こんにちは、プロジェクトを終了しようとしていますが、バイナリ ファイルからの読み取りバイトについて混乱しています。私の目標は、EOFまで毎回2バイトを読み取ることです。最初に、最初のバイトの最初のビット 0 または 1 をチェックし、残りの 7 ビットを整数のように出力したい。また、2番目のバイトを整数として出力したいので、これを持っています

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ビットを取得する方法と、整数のように2番目のバイトを出力する方法もわかりませんでした。

thnx..

4

2 に答える 2

3

2 番目の fread は必要ありません。配列のアドレスを取得しないでください (no &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

shortaが 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]);
}

これは一度に 2 バイトを読み取り、何かを読み取ったことを確認し (戻り値は読み取った項目の数)、それらを出力します。

于 2013-03-01T00:25:24.730 に答える