用fortran 90读取C无格式二进制文件

用fortran 90读取C无格式二进制文件,c,file-io,fortran,binaryfiles,fortran90,C,File Io,Fortran,Binaryfiles,Fortran90,我刚刚收到一个C、IEEE浮点的二进制未格式化文件,我想用Fortran 90打开它。看起来这个文件原来是一个513乘251的矩阵,但是可能里面有更多的东西,比如矩阵的大小,尺寸等等。有可能吗?如何将所有内容读入变量 这是我第一次尝试的代码示例 program ReadDataIn real :: DataIn character(len=90) :: FileName= Path/and/file_name/of/the/C_binaryfile

我刚刚收到一个C、IEEE浮点的二进制未格式化文件,我想用Fortran 90打开它。看起来这个文件原来是一个513乘251的矩阵,但是可能里面有更多的东西,比如矩阵的大小,尺寸等等。有可能吗?如何将所有内容读入变量

这是我第一次尝试的代码示例

program ReadDataIn
  real               :: DataIn
  character(len=90)    :: FileName= Path/and/file_name/of/the/C_binaryfile

  open (99, file = trim(FileName), iostat=ios, form = 'unformatted', ACCESS='stream')
  read(99) DataIn
  close(99)
  print*, DataIn
endprogram ReadDataIn
编译并运行代码后,我在
print*,DataIn
上只得到了一个数字


确保存储的数字不止一个。

如果只写矩阵,C只写513乘251的数字。默认情况下,Fortran通常会写入额外的信息,因此使用
access=“stream”
打开文件。当然还有
form=“unformatted”
。另一个区别是C是行主,Fortran是列主,因此Fortran在251 x 513矩阵中读取。如果你需要它是513乘251,把它调换一下。如果C程序是为了写更多的东西而写的,那么文件中可能会有更多的东西。。。在这种情况下,您需要知道C程序员写了什么,或者通过使用十六进制编辑器进行反向工程。

是的,这是可能的。(不允许发布作为答案,但是对于这样的问题,没有更多的内容可以说。)嗨,谢谢你的回答。。我只是修改了一点问题,更具体一点。!第一个突出问题的可能重复之处在于,您正在将数据读入标量变量。如果你想要一个数据数组,你需要声明一个数组来读取数据。@Jonathan Dursi谢谢你的帖子。我试过你写的链接上写的东西。然而,对我来说,它产生了与我的代码相同的输出。。。无论如何,我学到了新的想法。。。谢谢谢谢我试着:打开(99,file=trim(FileName),iostat=ios,form='unformatted',ACCESS='stream'),然后读取(99)数据。但当我打印*时,显示器上只显示一个数字中的数据。发生了什么?@Quim最好将示例代码编辑到问题中,以显示您尝试了什么以及运行时发生了什么。因为我们不知道DataIn是什么,所以无法处理您的注释,我们需要查看该变量是如何声明的。@在您的代码中,Quim
DataIn
声明为
real
,它是一个数字。如果你读一个数字,你就会得到一个数字。如果你的一个数字多次出现,你会得到几个顺序的数字。嗨@Vladimir,这就是我为解决这个问题所做的。。。谢谢