12

そのため、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.
}

私はまだ他に何も書いていませんが、いわば fread を「進行」させる方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

31

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

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

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

if (file) {
    /* File was opened successfully. */
    
    /* Attempt to read */
    while (fread(buffer, sizeof *buffer, 4, file) == 4) {
        /* byte swap here */
    }

    fclose(file);
}

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

于 2013-03-29T05:24:46.887 に答える