12

所以我不完全确定如何使用 fread。我有一个 little-endian 的二进制文件,需要转换为 big-endian,但我不知道如何读取该文件。这是我到目前为止所拥有的:

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.
}

我还没有写任何其他东西,但我只是不确定如何让恐惧“进步”,可以这么说。任何帮助,将不胜感激。

4

2 回答 2

31

这不是您从 C 中正确读取文件的方式。

fread返回一个size_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 回答
-2
FILE* file = fopen(filename, "rb");
char buffer[4];

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

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

fclose(file);
}
于 2020-07-06T06:57:51.293 回答