|
如果你采用二进制文件,就应该放弃回车换行符的想法。(那是文本文件中的分隔符)
二进制文件通常不用分隔符,数据紧凑的在一起。程序员(或者数据格式的设计者),他们心中有数据的结构,心中知道数据的分割在什么位置就行了。
回到你的问题,如图中 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
|
|