如何在Fortran中读取Matlab编写的二进制文件?

如何在Fortran中读取Matlab编写的二进制文件?,matlab,binary,fortran,Matlab,Binary,Fortran,我想将Matlab在二进制文件中写入的双精度值数组读入Fortran(编译器gfortran)中的代码,但是我的读取代码不起作用。你能告诉我做这件事的正确方法吗 这是我的Matlab代码,它可以工作 a=[0.6557 0.0357 0.8491 0.9340 0.6787]; fid=fopen('ft1.bin','w'); fwrite(fid,a,'double'); fclose('all'); fid=fopen('ft1.bin','r'); a2=fread(fid,5,'d

我想将Matlab在二进制文件中写入的双精度值数组读入Fortran(编译器gfortran)中的代码,但是我的读取代码不起作用。你能告诉我做这件事的正确方法吗

这是我的Matlab代码,它可以工作

a=[0.6557 0.0357 0.8491 0.9340 0.6787];

fid=fopen('ft1.bin','w');
fwrite(fid,a,'double');
fclose('all');

fid=fopen('ft1.bin','r');
a2=fread(fid,5,'double');
fclose('all');

a2
这是我的Fortran代码,当我试图读取文件
ft1.bin

program code1
implicit none

double precision, dimension(5) :: a2
integer :: i

open(1,FILE="ft1.bin",FORM='UNFORMATTED',ACTION='READ')
read(1) a2
close(1)

print *, a2

end program code1
当我试着运行它时

gfortran code1.f90 -o bb1
./bb1
At line 8 of file code1.f90 (unit = 1, file = 'ft1.bin')
Fortran runtime error: Unformatted file structure has been corrupted
必须避免使用
ACCESS=“STREAM”
,例如

PROGRAM test
   IMPLICIT NONE

   INTEGER, PARAMETER :: dp = KIND(1D0)
   INTEGER :: funit, io_stat
   REAL(dp) :: a(5)

   OPEN(NEWUNIT = funit, FILE = 'ft1.bin', STATUS = "OLD", ACCESS = "STREAM", FORM = "UNFORMATTED", IOSTAT = io_stat)
   READ(funit, IOSTAT = io_stat) a
   WRITE(*, *) a
   CLOSE(funit)
END PROGRAM
必须避免使用
ACCESS=“STREAM”
,例如

PROGRAM test
   IMPLICIT NONE

   INTEGER, PARAMETER :: dp = KIND(1D0)
   INTEGER :: funit, io_stat
   REAL(dp) :: a(5)

   OPEN(NEWUNIT = funit, FILE = 'ft1.bin', STATUS = "OLD", ACCESS = "STREAM", FORM = "UNFORMATTED", IOSTAT = io_stat)
   READ(funit, IOSTAT = io_stat) a
   WRITE(*, *) a
   CLOSE(funit)
END PROGRAM

如果不检查其返回值是否有错误,则使用
IOSTAT
没有意义。如果不检查其返回值是否有错误,则使用
IOSTAT
没有意义。