1

我正在强制介绍 idl 试图调试一些旧代码。

我有一个带有 ascii 标头的二进制图像文件(如果感兴趣的话,它是火星的 THEMIS IR BTR 图像)。代码使用 OPENR 作为单元 1 打开文件,然后使用 ASSOC(1,BYTARR(256)) 读取文件的前 256 个字节。从中返回的是 256 个 ascii 字符 dex 值,但它们大多是与字母数字字符不对应的高或低数字,并且与我知道文件中的标题无关。

可能有助于诊断的一件事:原始文件是该文件的 g 压缩版本。如果我尝试直接打开它(例如使用 less),它允许我阅读标题。但是,如果我先解压缩它(gzip -c filename.IMG.gz > filename.IMG)然后尝试再次读取它,我会得到二进制 gobbledegook。(less 在打开之前给我一个警告:“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 测试文件上进行了尝试,它按预期工作。

4

2 回答 2

1

31 139 8 是“压缩”文件的 GZIP 标头的开头。

http://www.gzip.org/zlib/rfc-gzip.html#file-format

所以是的,文件看起来需要先解压缩。

尝试使用 gunzip 解压缩文件,然后再次检查文件头。如果是 31 139 08... 再次,看起来它已经被压缩了两次。

否则不管它是什么,它很可能最终被解压了。为什么未压缩的文件没有被解码还有待观察。

于 2012-07-02T23:30:14.437 回答
1

尝试COMPRESS关键字OPEN

openr, 1, filename, /compress

关键字指的COMPRESS是一个压缩文件,所以它既可以用于读取压缩文件,也可以用于写入压缩文件。

于 2012-07-03T19:33:14.783 回答