c - C 中读/写 int 二进制文件错误

标签 c binaryfiles

我在 C 语言中读取/写入二进制文件时遇到错误。问题是: - 我使用 fwrite 将 int (例如 2)写入文件 - 我尝试使用 fread 从文件中读取此 int - 当我读它时,它不是 2,而是一些长数字,例如967899906 或 2071332354 或 1030372866(始终不同)。

我像这样用 C 写入二进制文件:

FILE * writeFile = fopen("test.bin","wb");

//test int vars
int test1 = 1;
int test2 = 2;
int test3 = 3;

//writing some ints to binary file
fwrite(&test1,1,1, writeFile);
fwrite(&test2,1,1, writeFile);
fwrite(&test3,1,1, writeFile);

fclose(writeFile);

然后我从文件中读取如下内容:

FILE *readFile = fopen("test.bin","rb");
int data;
while(fread(&data,1,1, readFile)==1){
   printf("%d", data); //here it will output some random number
}
fclose(readFile);

最佳答案

fwrite想要写入的数据大小作为第二个参数,因此在您的情况下 sizeof(int)

对于fread也是如此

#include <stdio.h>

int main(void)
{
     FILE * writeFile = fopen("test.bin","wb");

     if (writeFile != NULL)
     {
         //test int vars
         int test1 = 1;
         int test2 = 2;
         int test3 = 3;

         //writing some ints to binary file
         fwrite(&test1,sizeof(test1),1, writeFile);
         fwrite(&test2,sizeof(test2),1, writeFile);
         fwrite(&test3,sizeof(test3),1, writeFile);

         fclose(writeFile);
     }
     else
     {
         perror("Error opening file to write: ");
         return 1;
     }


     FILE *readFile = fopen("test.bin","rb");
     if (readFile != NULL)
     {
         int data;
         while(fread(&data,sizeof(data),1, readFile)==1){
            printf("%d\n", data);
         }
         fclose(readFile);
     }
     else
     {
         perror("Error opening file to read: ");
         return 1;
     }

    return 0;
}

提示:始终测试 fopen 是否成功。

编辑

要使用 1 字节变量,如注释所示,只需使用 uint8_t 变量

#include <stdio.h>
#include <stdint.h>

int main(void)
{
     FILE * writeFile = fopen("test.bin","wb");

     if (writeFile != NULL)
     {
         //test int vars
         uint8_t test1 = 1;
         uint8_t test2 = 2;
         uint8_t test3 = 3;

         //writing some ints to binary file
         fwrite(&test1,sizeof(test1),1, writeFile);
         fwrite(&test2,sizeof(test2),1, writeFile);
         fwrite(&test3,sizeof(test3),1, writeFile);

         fclose(writeFile);
     }
     else
     {
         perror("Error opening file to write: ");
         return 1;
     }


     FILE *readFile = fopen("test.bin","rb");
     if (readFile != NULL)
     {
         uint8_t data;
         while(fread(&data,sizeof(data),1, readFile)==1){
            printf("%d\n", data);
         }
         fclose(readFile);
     }
     else
     {
         perror("Error opening file to read: ");
         return 1;
     }

    return 0;
}

关于c - C 中读/写 int 二进制文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251987/

相关文章:

r - 在 R 中写入二进制文件

c++ - 如何将二进制文件读入无符号字符 vector

c++ - 将文本和二进制数据连接到一个文件中

android - 无法编译cwm恢复

c - c中的返回语句

c - fork 和现有线程?

c# - 通过解码 "*.itemdata-ms"二进制数据文件自定义Windows 8.1 StartScreen (Windows 8.1, StartScreen, C#)

c# - 在c#中读取复合文档

c - 这是正确的吗? (在 C 中读入文件)

c - 在 C 中将 char append 到 char*?