二进制文件读写(写给新手)Fortran

2008/05/17 11:43
  一些朋友总是咨询关于二进制文件

的读写和转化。这里就我自己的理解说一说。
一).一般问题
  二进制文件与我们通常使用的文本文件储存方式有根本的不同。这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。这样的编辑器有很多,在我们的 CVF 附带的集成开发环境下就可以(将二进制文件拖动到 IDE 窗口后松开)。Visual Studio 2005 也是可以的。(不过需要在 File 菜单下 Open,File)
  另外推荐一款使用较多的软件,叫做 UltraEdit(以下简称 UE)。是很不错的文本编辑器,也能做十六进制编辑器使用。
  为 什么要用十六进制编辑器?而不用 2 进制呢?因为 2 进制实在太小,书写起来会很长,很不直观。而我们的计算机把 8 位作为一个字节。刚 好 2 ** 8 = 256 = 16 ** 2。用 8 位 2 进制表达的数,我们用 2 个十六进制数据来表达,更直观和方便。
二).文件格式
  所有文件,笼统意义上将可以区分为两类,一类是文本文件,一类是二进制文件。
1).文本文件
  文本文件用记事本等文本编辑器打开,我们可以看懂上面的信息。所以使用比较广泛。通常一个文本文件分为很多很多行,作为数据储存时,还有列的概念。实际上,储存在硬盘或其他介质上,文件内容是线一样储存的,列是用空格或 Tab 间隔,行是用回车和换行符间隔。
  以 ANSI 编码(使用较多)的文本文件来说,例如我们储存如下信息:
10
11
12
  需 要的空间是:3 行 × 每行 2 个字符 + 2 个回车符 + 2 个换行符 = 10 字节。文本文件储存数据是有格式,无数据类型的。比 如 10 这个数据,并不指定是整型还是实型还是字符串。它有长度,就是 2,两个字节。储存时计算机储存它的 ASCII 码:31h,30h。(十六 进制表示)。回车符是:0Dh,换行符:0Ah。
    因此,这个数据储存是这样的:
31 30 0D 0A  31 31 0D 0A  31 32
  (红色为回车符和换行符) 31h 30h 就是 10,31h 31h 就是 11,31h 32h 就是 12。因此我们也可以认为文本文件是特殊的二进制文件。
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Fortran中的`OPEN`、`READ`和`WRITE`语句来实现将`u.dat`文件转化为二进制文件`u.grd`的操作。具体实现如下: ```fortran program convert implicit none integer :: i, j, nx, ny real*4 :: x, y, u character(20) :: infile, outfile open(10, file='u.dat', status='old', action='read') !打开u.dat文件 read(10,*) nx, ny !读取nx和ny的值 open(20, file='u.grd', status='replace', action='write') !打开u.grd文件 write(20) nx, ny !将nx和ny值写入到u.grd文件中 do j=1,ny do i=1,nx read(10,*) x, y, u !读取x、y、u的值 write(20) u !将u的值写入到u.grd文件中 end do end do close(10) !关闭u.dat文件 close(20) !关闭u.grd文件 end program convert ``` 在上述代码中,我们首先打开了`u.dat`文件,并通过`read`语句读取了文件中的`nx`和`ny`的值。然后,我们打开`u.grd`文件,并通过`write`语句将`nx`和`ny`的值写入到文件中。接着,我们通过两个嵌套的循环,读取`u.dat`文件中的每个点的`x`、`y`和`u`的值,并将`u`的值写入到`u.grd`文件中。最后,我们分别关闭了`u.dat`和`u.grd`文件。 需要注意的是,在读取`u.dat`文件时,我们使用了`real*4`类型的变量来存储`x`、`y`和`u`的值,这是因为`u.grd`文件是以二进制形式存储数据的,因此需要使用固定长度的数据类型来确保数据的正确读取和写入。如果`u.dat`文件中的数据类型不是`real*4`,则需要相应地修改代码中的数据类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值