Здравствуй, ЛОР,
как в 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
Но это уродство и неэффективно. Советы?