Fortran Coder

关于二进制文件读写的疑问?

查看数: 10440 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-3-31 12:39

正文摘要:

这两天学习二进制文件读写 论坛上的帖子http://fcode.cn/guide-4-1.html帮助很大,其实对于二进制数据进行读写时可以采用的读写方式有两种直接读取(Access = 'Direct' )和顺序读取(Access = 'Sequential' ) 于是采用 ...

回复

xuanyz 发表于 2020-4-1 10:29:53
感谢感谢fcode,这下全明白了,再次感谢
fcode 发表于 2020-4-1 09:20:52
如果你采用二进制文件,就应该放弃回车换行符的想法。(那是文本文件中的分隔符)
二进制文件通常不用分隔符,数据紧凑的在一起。程序员(或者数据格式的设计者),他们心中有数据的结构,心中知道数据的分割在什么位置就行了。

回到你的问题,如图中 10 00 00 00,这并不是“行起始和行结束的数值符号代码”,而是(顺序读取特有的)“本次记录的长度”,比如这里的 0x10000000,十进制就是16,说明本次记录的长度是16个字节。你可以把输出的内容的字节数加起来,就是16。
一般在直接读取中,不会用到本次记录的长度。因为直接读取,要求每次的记录长度是相等的。(只有每次相等,才可以根据记录数 rec 和记录长度 recl,直接计算出读取的位置,也就是 (rec-1)*recl + 1)

所以,直接读取需要在 Open 时指定 recl 也就是记录长度。指定后不能改变,除非close了重新open
而顺序读取,每次读写的记录长度不一样。为了让读取者知道本次记录有多长,就把记录长度写在本次记录的前面和后面。

除了直接读写和顺序读写,Fortran2003还增加了流文件读写,非常的灵活。反正我很久不用直接和顺序读取二进制了,自有了Fortran2003,我是凡二进制一律用流文件读写。
你可以阅读 http://stream.w.fcode.cn
xuanyz 发表于 2020-3-31 15:00:41
本帖最后由 xuanyz 于 2020-3-31 17:13 编辑

感谢fcode提醒,又仔细看了这篇文章,明白了部分,似乎应该是"行使用回车和换行符间隔",但回车和换行符又怎么输入呢?
fcode 发表于 2020-3-31 14:20:33
你提到的文章,多看几遍。

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 16:31

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表