可以直接从二进制文件FORTRAN读取字节?(Can Fortran read bytes dire

2019-06-26 10:10发布

我有一个我想与Fortran的读取二进制文件。 问题是,它不是由Fortran语言写的,所以它没有记录长度的指标。 所以平时未格式化的Fortran读取将无法正常工作。

我有一个想法,我可以偷偷摸摸和读取文件的格式的文件,逐字节(或4个字节由4个字节,真的)到字符数组,然后字符的内容转换成整数,并通过浮动传递函数或可怕的等价声明。 但是,这并不工作:我尝试一次读取4个字节,根据从输出POS inquire语句,读跳过像6000个字节左右,字符数组被装载垃圾。

所以这是一个没有去。 是否有这种做法,我忘了一些细节? 或者是有只是一个完全不同的,更好的方式用Fortran做到这一点? (顺便说一句,我也试着读入一个integer*1阵列和一个字节数组,即使这些代码将编译,当它来读声明,代码崩溃。)

Answer 1:

是。

Fortran 2003的推出流接入到语言。 在此之前,大多数处理器都支持等同的东西作为一个扩展,也许所谓的“二元”或类似。

未格式化的流访问强加文件中没有记录的结构。 作为一个例子,来读取相应于在同伴C处理器(如果有的话)用于特定的Fortran处理器单个int文件数据:

USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT
INTEGER, PARAMETER :: unit = 10
CHARACTER(*), PARAMETER :: filename = 'name of your file'
INTEGER(C_INT) :: data
!***
OPEN(unit, filename, ACCESS='STREAM', FORM='UNFORMATTED')
READ (unit) data
CLOSE(unit)
PRINT "('data was ',I0)", data

您可能仍然有字节序和数据类型的大小问题,但这些方面都与语言无关。

如果你是2003年之前的Fortran然后格式化直接访问阅读到合适的整数变量可能工作写入语言标准 - 这是Fortran的处理器具体,但适用于许多当前的处理器。



文章来源: Can Fortran read bytes directly from a binary file?