1

我正在對idl進行強制介紹,試圖調試一些舊代碼。IDL:讀取二進制文件的ascii頭文件

我有一個二進制映像文件,它有一個ascii頭(這是一個THEMIS火星的BTR圖像,如果感興趣的話)。代碼使用OPENR打開文件爲單元1,然後使用ASSOC(1,BYTARR(256))讀取它的前256個字節。從那裏返回的是256個ASCII字符的右值,但它們大多數是高或低的數字,不對應於字母數字字符,並且與我知道的頭文件無關。

有一件事可能有助於診斷:原始文件是g-zip版本的文件。如果我嘗試直接打開它(例如使用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測試文件,並將其按預期工作。

回答

1

31 139 8是「放氣」文件的GZIP標頭的開始。

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

所以,是的,這個文件看起來像它需要先解壓縮。

嘗試使用gunzip解壓縮文件,然後再次檢查標題。如果是31 139 08 ...再次看起來它已經被壓縮了兩次。

否則,不管它是什麼,它很可能已被最終解壓縮。它還有待觀察,爲什麼未壓縮的文件沒有被解碼。

+0

這很好,問題在於我沒有正確解壓縮它,儘管代碼應該自己管理它。謝謝。 – EddyTheB

1

嘗試COMPRESS關鍵字OPEN

openr, 1, filename, /compress 

COMPRESS關鍵字是指一個壓縮文件,所以它既是用於讀取和寫入壓縮文件。