C fread()无法从二进制文件中读取正确的值

C fread()无法从二进制文件中读取正确的值,c,integer,fread,C,Integer,Fread,我有一个只包含整数的二进制文件。我尝试用以下代码读取10个整数: #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv){ int* data=(int*)malloc(10*sizeof(int)); FILE *fp=fopen("data.bin","rb"); if(fp==NULL){printf("Error opening the file data.b

我有一个只包含整数的二进制文件。我尝试用以下代码读取10个整数:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char **argv){

  int* data=(int*)malloc(10*sizeof(int));

  FILE *fp=fopen("data.bin","rb");
  if(fp==NULL){printf("Error opening the file data.bin\n");}

  size_t w=fread(data,sizeof(int),10,fp);
  if(w!=10){printf("Error reading the data from data.bin\n");}
  fclose(fp);


  printf("%i",data[0]);
}
#包括
#包括
int main(int argc,字符**argv){
int*data=(int*)malloc(10*sizeof(int));
FILE*fp=fopen(“data.bin”、“rb”);
如果(fp==NULL){printf(“打开文件data.bin\n时出错”);}
大小w=fread(数据,大小f(int),10,fp);
如果(w!=10){printf(“从data.bin读取数据时出错”);}
fclose(fp);
printf(“%i”,数据[0]);
}

问题是读取的值不是预期值。例如,第一个整数是0,但printf命令打印86183936。我将该文件视为十六进制,字节也应如此。

我尝试在我创建的数据文件上运行您的程序,效果良好。我怀疑您的数据文件格式不正确

我在一个32位整数的小型endian处理器上运行。这是我的二进制文件的格式:

当您使用
fread()
读取文件时,应使用
fwrite()
“仅包含整数的二进制文件”将数据写入文件,但指定得不够。大端还是小端?多少字节?尝试使用类似的代码和
fwrite
创建文件,并将创建文件与已有文件进行比较。是否确定文件中的零与
int
的大小相同?看起来您的二进制文件可能每个整数只使用一个字节。请显示文件的前几行。描述文件的格式。
0
是预期的第一个整数。第二、第三和第四节是什么?(16,35,5?)。