c - 如何使用fread和fwrite函数读写二进制文件?

标签 c binaryfiles fwrite fread

您好,在我的项目中,我必须读取一个 .bin 文件,其中包含 short(16 位值) 形式的传感器数据。我在缓冲区中使用 fread 函数来执行此操作,但我觉得读入没有正确进行。我的意思是我写的和读到的不一致。你们能指出这里出了什么问题吗?这不是我项目中的代码...我只是想在这里验证 freadfwrite 函数。

#include<stdio.h>
void main()
{
    FILE *fp = NULL;

    short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
    short result[10];

    fp=fopen("c:\\temp.bin", "wb");

    if(fp != NULL)
    {
        fwrite(x, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
        rewind(fp);
        fread(result, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
    }
    else
        exit(0);

    printf("\nResult");
    printf("\n%d",result[0]);
    printf("\n%d",result[1]);
    printf("\n%d",result[2]);
    printf("\n%d",result[3]);
    printf("\n%d",result[4]);
    printf("\n%d",result[5]);
    printf("\n%d",result[6]);
    printf("\n%d",result[7]);
    printf("\n%d",result[8]);
    printf("\n%d",result[9]);

    fclose(fp)
 }

在我执行 fread()(十六进制值)之后:

temp.bin:
01 02 03 04 05 06 e1 8e 88 06 ef bf b6 0b...

在我执行 fwrite() 之后

stdout:
Result
0
914
-28
-28714
-32557
1
512
-32557
908
914

最佳答案

w+(读写)模式打开文件。以下代码有效:

#include<stdio.h>
int main()
{
    FILE *fp = NULL;

    short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
    short result[10];
    int i;

    fp=fopen("temp.bin", "w+");

    if(fp != NULL)
    {
        fwrite(x, sizeof(short), 10 /*20/2*/, fp);
        rewind(fp);
        fread(result, sizeof(short), 10 /*20/2*/, fp);
    }
    else
        return 1;

    printf("Result\n");
    for (i = 0; i < 10; i++)
        printf("%d = %d\n", i, (int)result[i]);

    fclose(fp);
    return 0;
}

输出:

Result
0 = 1
1 = 2
2 = 3
3 = 4
4 = 5
5 = 6
6 = 5000
7 = 6
8 = -10
9 = 11

关于c - 如何使用fread和fwrite函数读写二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180006/

相关文章:

c - 如何使用临时 int (tmp) 在 C 中对结构类型的数组进行冒泡排序?

c++ - WinApi压缩,python3中的解压缩

c - 在 c 中写入/读取二进制/文本之间的差异

c++ - 过去某个时间点无法读取二进制文件

php - 使 cURL 在收到数据时写入数据

php - PHP 中带有 'a' 选项的 fopen() 的效率

c - 在 C 中将整数除以 2 的幂

c - 在 C 中获取大文件大小

c++ - 将二维数组写入/读取到二进制文件 C++

c - fwrite 打印垃圾,fread 读取垃圾结构