我正在强制介绍idl尝试调试一些旧代码。
我有一个带有ascii标题的二进制图像文件(它是火星的THEMIS IR BTR图像,如果感兴趣的话)。代码使用OPENR将文件作为单元1打开,然后使用ASSOC(1,BYTARR(256))读取它的前256个字节。从那里返回的是256个ascii字符dex值,但它们大多是高或低数字,与字母数字字符不对应,并且与我知道在文件上的标题无关。
可能有助于诊断的一件事:原始文件是文件的g-zipped版本。如果我尝试直接打开它(例如使用less),它允许我读取标题。但是,如果我先解压缩它(gzip -c filename.IMG.gz> filename.IMG),然后尝试再次读取它,我得到二进制gobbledegook。 (在打开之前,少给我一个警告:" filename.IMG可能是一个二进制文件。无论如何看到它?")。
有什么建议吗?
这里是IDL代码:
CLOSE,1
OPEN,1,FILENAME
A = ASSOC(1,BYTARR(256))
B = A[0]
print,'B - ',B
H = STRING(B)
print,'H - ',H
这就是它给我的东西:
B - 31 139 8 8 7 17 238 79 0 3 ... (and on for 256 characters)
H - [Some weird symbol]
我已经在纯粹的ascii测试文件上尝试了它,它按预期工作。
答案 0 :(得分:1)
31 139 8是“缩小”文件的GZIP标题的开头。
http://www.gzip.org/zlib/rfc-gzip.html#file-format
所以是的,该文件看起来需要先解压缩。
尝试使用gunzip解压缩文件,然后再次检查标题。如果再次是31 139 08 ...,它看起来已被压缩了两次。
否则,无论它是什么,它很可能最终被解压缩。还有待观察为什么未压缩的文件没有被解码。
答案 1 :(得分:1)
尝试使用COMPRESS
关键字OPEN
:
openr, 1, filename, /compress
COMPRESS
关键字是指压缩文件,因此它既可以读取也可以写入压缩文件。