2

我正在尝试从 fortran 编写二进制数据文件,但我发现常规文件接口非常有限,我想知道 Fortran 是否具有 POSIX 编译功能。

我找到了这个标准:IEEE 1003.9-1992,但我不知道大多数常见编译器是否完全支持它(或者我是否必须激活任何标志)。我找不到任何实用信息,您能给我一些建议吗?

顺便说一句,我正在尝试编写图像文件,首先我想尝试使用tga/pgm。另外我不想向外部库添加任何依赖项,谢谢!

解决方案:

最后我可以写ppm 文件了,我不得不避免在内部循环结束时打印换行符,最终代码是这样的:

      subroutine imgwrite()
      implicit none
*     ******************************************************************
      include 'image.f'
*     ******************************************************************
      integer x, y, i

      write(imgunit, '(A)') 'P3'
      write(imgunit, '(I4)') imgwidth
      write(imgunit, '(I4)') imgheight
      write(imgunit, *) 255

      do 10 y=1, imgheight
        do 20 x=1,imgwidth
          write(imgunit,100) (int(imgpixels(x,y,i)*255D0), i=1,3)
20      continue
        write(imgunit,110)
10    continue


100   FORMAT(3(I4),$)
110   FORMAT((/))

      return
      end

没有人在 FORTRAN 中提供有关 POSIX 的任何信息。

谢谢。

4

2 回答 2

5

TGA 是一种非常简单的格式,即使它是二进制的,所以应该可以从 FORTRAN 中编写它。但是,如果没有外部库的帮助,我不想在 FORTRAN 中尝试 TIFF、PNG、GIF 或 JPG。

您可能会发现netpbm格式系列中的一种更易于编写,并且可以轻松地将它们转换为 TGA 或您可能需要使用简单命令进行显示或进一步处理的任何其他格式。PBM 格式包括纯 ASCII 和二进制风格,因此即使二进制文件访问存在问题,也可以编写它们(尽管效率很低)。该工具套件包括与大约 100 种其他图像文件格式之间的转换。

编辑:抱歉,对于如何从 FORTRAN 编写文件,我无法提供更多帮助,但是当我上次使用该语言时,打孔卡很常见。;-)

于 2009-04-14T10:21:06.360 回答
0

读写二进制文件(随机或顺序)以供其他语言使用的问题是 fortran io 系统使用文件中的其他信息。我不记得它在 f77 标准中,但肯定大多数 pc 和 unix 编译器都这样做了。

例如,如果写入二进制顺序文件

write(bsf) doublevariable, realvariable

那么文件将包含(如果您可以读取二进制文件)

12<value of double><value of real>12

每条记录都有记录标记,它们是在前端和末端写入的字节长度。这是必需的,因为每条记录可以具有不同的长度,并且在读取时不必读取为记录编写的所有内容。例如,如果一个人正在阅读上述内容,则可能有

read(bsf) doublevariable

bsf 的下一次读取需要在下一条记录的开头。

因此,应该通过用 C 或任何不执行 Fortran 功能的语言编写的库来读取或写入二进制文件以与其他语言共享,

于 2009-07-31T17:33:17.213 回答