1

我有一个二进制文件,可以用 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

我读了一些东西,但参数不是我所期望的。这意味着我正在读取错误的字节或变量的声明是错误的。你觉得你能帮上忙吗?

4

2 回答 2

1

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

open(10,file='my_binary_file')

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

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

于 2013-04-16T16:33:22.353 回答
1

在 C 侧

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

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

于 2013-04-16T18:19:07.573 回答