web-dev-qa-db-ja.com

ファイルがCで終了したことをfreadはどのようにして知るのですか?

したがって、freadの使用方法は完全にはわかりません。リトルエンディアンのバイナリファイルをビッグエンディアンに変換する必要があり、ファイルの読み取り方法がわかりません。ここに私がこれまで持っているものがあります:

FILE *in_file=fopen(filename, "rb");
char buffer[4];
while(in_file!=EOF){
    fread(buffer, 4, 1, in_file);
    //convert to big-endian.
    //write to output file.
}

私はまだ何も書いていませんが、いかにして恐怖心を「進歩」させるのか、よくわかりません。任意の助けいただければ幸いです。

9
user202925

これは、Cのファイルから適切に読み取る方法ではありません。

fread は、正常に読み取られた要素の数を表すsize_tを返します。

FILE* file = fopen(filename, "rb");
char buffer[4];

if (file) {
    /* File was opened successfully. */

    /* Attempt to read */
    while (fread(buffer, 1, 4, file) == 4) {
        /* byte swap here */
    }

    fclose(file);
}

ご覧のとおり、freadが4つの要素以外のものを抽出するとすぐに、上記のコードは読み取りを停止します。

18