LINUX.ORG.RU

Сообщения Fatoff

 

[haskell] Прочитать бинарные данные в массив

Форум — Development

Здравствуй, ЛОР,

как в haskell'e просто прочитать бинарные данные в массив? Скажем, есть достаточно сложный бинарный файл, часть которого парсится(заголовки, служебная информация), а часть — float, которые надо непосредственно в массив/список засунуть и обрабатывать. По идее, это должно быть элементарно, но мы с гуглем пришли пока только вот к этому:

import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.ByteString.Lazy as BL
import qualified Data.Binary.IEEE754 as B
import Data.Word
import Data.Bits (shiftL)
makeW32 :: BL.ByteString -> [Word32]
makeW32 bytestring = [chunkToW32 c | c <- chunk bytestring]
    where
      chunk bs 
          | L.length bs == 0 = []
          | otherwise =  first : chunk rest 
                 where (first, rest) = BL.splitAt 4 bs
      
chunkToW32 :: L.ByteString -> Word32
chunkToW32 chunk =
    BL.foldl' (\ res w -> (res `shiftL` 8) + fromIntegral w) 0 $ BL.reverse chunk

main = do
  let btest = L.pack "Q\SYNtA\184\187\130A%\184bA\149\196\243\193\SUB/\237\193\145Z\250\193\196\209\224A\v\179\229A\t\249\219A\177\200\179A"
  let fl = map B.wordToFloat $ makeW32 btest
  print fl

Но это уродство и неэффективно. Советы?

 

Fatoff
()

RSS подписка на новые темы