如何在Fortran中读取C语言中可读的二进制文件

时间:2013-04-16 15:47:13

标签: c binary fortran

我有一个二进制文件,我可以用C读取以下代码

  int it,ix; 
  double par1,par2,par3,par4,par5,par6; 

  fp = fopen("my_binary_file", "r"); 
  assert(fp != NULL); 
  fscanf(fp, "%d %lf %lf %lf \n",&it, &par1, &par2, &par3);
  fscanf(fp, "%d %lf %lf %lf \n",&ix, &par4 ,&par5,&par6);

我尝试使用这段代码在Fortran 90中读取相同的文件

  real(kind=8):: par1,par2,par3,par4,par5,par6
  integer :: it,ix

  open(1,file='my_binary_file',form='unformatted')

  read(1) it,par1,par2,par3
  read(1) ix,par4,par5,par6

但是我收到文件结束错误。我试着一起阅读这两行

  read(1) it,par1,par2,par3,ix,par4,par5,par6

我读了一些东西,但参数不是我的预期。这意味着我正在读错字节或者变量的声明是错误的。你认为你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

您的C代码看起来不像通常所说的二进制文件。如果它是C二进制文件,则必须使用隐式使用的STREAM输入,而不是SEQUENTIAL。只需尝试正常格式化的列表导向输入。

open(10,file='my_binary_file')

read(10,*) it,par1,par2,par3
read(10,*) ix,par4,par5,par6

如果文件中有更多内容,请显示它。

答案 1 :(得分:1)

在C面

1)对于二进制读取,您的C二进制文件应该打开为“rb”。 2)fscanf不用于读取二进制文件。通常使用fread读取它们。 3)如果有效,则假设它是文本文件

在Fortran一侧, 4)因为它是一个文本文件,所以表格应该是'FORMATTED'。 5)每次在Fortran中读取后,文件指针移动到下一行。这与C中的行为不同。 6)如果你不想弄乱格式语句,请使用自由格式读取来获取数据。