【问题标题】:Reading C unformatted binary file using fortran 90使用 fortran 90 读取 C 未格式化的二进制文件
【发布时间】:2014-08-26 15:16:40
【问题描述】:

我刚刚收到一个用于 C、IEEE-float 的二进制未格式化文件,我想使用 Fortran 90 打开它。看起来该文件最初是一个 513 x 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 只得到了一个号码。

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

【问题讨论】:

  • 是的,有可能。 (不允许发布作为答案,但对于这样的问题,不能再多说什么了。)
  • 嗨,谢谢你的回答..我只是修改了一点问题,更具体。!
  • 第一个明显的问题是您正在将数据读入标量变量。如果你想要一个数据数组,你需要声明一个数组来读取数据。
  • @Jonathan Dursi 感谢您的帖子。我试过你写的链接上写的内容。然而,对我来说,它产生了与我的代码相同的输出......无论如何,我学到了新的想法......谢谢!

标签: c file-io fortran binaryfiles fortran90


【解决方案1】:

如果只写矩阵,C 只会写 513 乘 251 的数字。 Fortran 默认情况下通常会写入额外信息,因此请改为使用access="stream" 打开文件。当然还有form="unformatted"。另一个区别是 C 是行优先的,而 Fortran 是列优先的,因此使用 Fortran 读取 251 x 513 矩阵。如果您需要将其设为 513 x 251,请将其转置。如果编写 C 程序以编写更多内容,则文件中可能会有更多内容……在这种情况下,您需要知道 C 程序员编写的内容,或进行逆向工程,例如,通过使用十六进制编辑器。

【讨论】:

  • 谢谢...我试过了:打开 (99, file = trim(FileName), iostat=ios, form = 'unformatted', ACCESS='stream') 然后读取 (99) DataIn。但是当我打印*时,DataIn 显示器上只出现一个数字。怎么回事?
  • @Quim 您最好将示例代码编辑到您的问题中,以显示您尝试过的内容以及运行它时会发生什么。无法解决您的 cmets,因为我们不知道 DataIn 是什么,我们需要查看该变量是如何声明的。
  • @Quim 在您的代码中Datain 被声明为real,它是一个数字。如果你读一个数字,你就会得到一个数字。如果您的一个号码多次出现,您将依次获得多个号码。
  • 嗨@Vladimir,这是我为解决问题所做的……谢谢!
猜你喜欢
  • 2018-11-29
  • 2014-06-16
  • 2012-09-03
  • 2012-04-29
  • 2016-10-21
  • 1970-01-01
  • 2013-02-17
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多