IDL:读取二进制文件的ascii头文件

时间:2012-07-02 23:23:08

标签: binary ascii non-ascii-characters idl-programming-language

我正在强制介绍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测试文件上尝试了它,它按预期工作。

2 个答案:

答案 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关键字是指压缩文件,因此它既可以读取也可以写入压缩文件。