IDL读写F77_UNFORMATTED文件的一个特点

写文件

filename="/home/allen/sample"
openw,1,filename,/F77_UNFORMATTED
a=[1L,3L,5L,7L,9L,11L,19L]
writeu,1,a
writeu,1,a
close,1
end

得到的sample文件应该保存了下面这个array: 28 1 3 5 7 9 11 19 28 28 1 3 5 7 11 19 28, 共 72 bytes , 其中 4 28应该是 ULong 的类型, 或者说C语言中的 unsigned int 类型, 但是因为是不大的正数, 编码和Long型的28是一样的, 简单地说就是 LonArr(9)+LonArr(9)

当做普通二进制文件读

filename="/home/allen/sample"
openr,2,filename
a=lonarr(5)
b=lonarr(5)
readu,2,a
print,a
readu,2,b
print,b
close,2
end

IDL> .go
% Compiled module: $MAIN$.
28 1 3 5 7
9 11 19 28 28

;这是我们容易理解的, 就只是把二进制数字罗列下去, 读到哪里, 停在哪里, 下一次读, 从这里开始.
;从这里也容易看到, F77_UNFORMATTED的格式不过是每次读写数据都要注意到始末位置都包含了一个表示数据总量的校验值

F77_UNFORMATTED格式打开读

filename="/home/allen/sample"
openr,2,filename,/F77_UNFORMATTED
a=lonarr(5)
b=lonarr(5)
readu,2,a
print,a
readu,2,b
print,b
close,2
end

IDL> .go
% Compiled module: $MAIN$.
1 3 5 7 9
1 3 5 7 9

;第一次读完停在9后面, 正常讲下一次读应该从11开始读入, 但这里不是, 它会从下一个检查点开始读, 也就是说, 这次读完, 不管读入了几个(变量的总容量超出实际数据量的话立即报错, 否则没关系, 所以是小于等于的关系), IDL会根据第一个检查点的数值直接调到合适的位置(即下一个初始检查点的位置)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值