如何在C中读取fortran二进制文件?

时间:2013-03-03 19:52:40

标签: c fortran binaryfiles

我有一个由fortran代码生成的二进制文件。该文件包含一系列双精度数。我需要在我的C程序中打开它,然后像通常的数组一样使用它。

我该怎么办?

二进制文件中如何表示double类型?

3 个答案:

答案 0 :(得分:6)

对于未格式化(即二进制)顺序文件,几乎所有Fortran编译器都会在每条记录的开头和结尾写下记录的长度。通常,长度以四个字节写入,但有些编译器使用八个字节。记录是使用单个Fortran写入语句编写的所有内容。如果这个数组是用一个带有这种类型文件的Fortran写语句编写的,那么你有4或8个字节要跳过,然后是数组,然后是4或8个额外字节。您可以通过使用十六进制编辑器查看文件来解决这个问题。如果数组是用多个写语句分段编写的(例如,按列或行),则每个记录都将具有此结构。

如果文件由Fortran编写为未格式化,则Fortran double类型将以该计算机的二进制表示形式编写。您应该能够在同一计算机类型的C中读取它。如果您正在更改体系结构而不仅仅是语言,则二进制表示可能会有所不同。

Fortran有其他文件访问方法,不包括记录长度信息。例如,直接访问。流访问的新方法是为语言间兼容性而设计的。

如果数组是多维的,你可能想要转置它,因为Fortran有列主要数组,而C使用行主要数据。

相关问题:Fortran unformatted file formatreading fortran unformatted file with python

答案 1 :(得分:1)

原则上你不能。

Fortran二进制文件的格式是未指定。这意味着,虽然您可以将程序状态保存在Fortran二进制文件中,并使用相同的Fortran实现重新打开它,但即使使用不同的Fortran实现,也无法可靠地执行此操作。

现在,人们可以通过有限的方式保存状态,因此,您可以计算出给定的Fortran二进制文件的结构,并且可能已经足够详细,您可以打开它在C程序中读取内容。但是,该知识完全针对有问题的Fortran编译器。

所以最好的办法是创建一个包含[0, 1, 2, 3, 4, 256, 65536, 65537, 1e10, 1e20, 1e30, 1e40]的Fortran数组,将其写入二进制文件,然后用二进制编辑器查看它,看看它是什么。

在那之后,你恐怕是你自己......

答案 2 :(得分:1)

在我看来,阅读fortran二进制文件的更好方法实际上是从从fortran 传递数组到C 读取它们。它可以为你节省很多痛苦。

  1. 编写一个实际可以读取此二进制文件的子程序
  2. 包装您的子程序,以便从C中调用它。
  3. 最难的部分是包装你的fortran子程序。 C和fortran之间的名称错误并不直接。它取决于您使用的编译器(即平台)和Fortran版本。您可以查看herehere以获取简单示例。

    首选,是通过适当的编译选项“手”完成。

    提示:了解可以在linux中使用 nm 命令或DLL导出查看器等工具的修改。

    更好的选择是使用 Fortran 2003 ,它会引入模块 iso_c_binding ,这有助于处理此类操作。