0
我試圖用Haskell的Data.Binary.Get解析一個Gzip文件的頭。標頭的結構如下:Haskell:解析二進制流,然後計算它的CRC
-
含ID,旗,他人
- 固定字段
- 如果數據的標誌& 0×01,則可選的16位字(長)+長度字節
- 如果flag & 0×02,則空結尾的字符串
- 如果標誌& 0×04,則空結尾的字符串
- ...
- 以上 CRC
要報告錯誤(例如, Gzip已意想不到的領域),我使用的解析器如下:
Data GzipError = GE1 | GE2 | ...
instance Error GzipError where ...
parseHeader :: ErrorT GzipError Get GzipHeader
這裏是我的問題:我如何解析的頭都固定&變量字段,但在同一時間得到字節串的字段被解析,以便我可以計算和驗證CRC?
我注意到我需要返回錯誤,因爲我想過使用lookAhead
,但它有一個Get a -> Get a
類型,這意味着我不能在內部執行錯誤處理,這是我需要做的。
這幾乎就像我需要爲獲取monad設置書籤,讀取字段,然後要求獲取ByteString從書籤到當前位置。當然,它不提供這種功能。
任何想法?