jamie.love: > Hello all, > > I'm wondering if anyone has a reference to any binary IO and data > conversion tutorials.
A good place to start looking is Data.Binary, http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary > I'm playing around with generating a BMP file in haskell, and am a > little stuck on the "best" way to go about the simple task of creating > the BMP header. The header is > > "BM" + 4 bytes for file size + 4 bytes reserved + 4 bytes for offset > where data begins. > > I have the basis starting off at: > > bmpHeader = runPut $ > [ 0x42, 0x4D ] ++ > [0 , 0, 0, 0] ++ > [0 , 0, 0, 0] ++ > [14 :: Int32] bmpHeader = runPut $ do put 'B' put 'M' put (0 :: Int32) put (0 :: Int32) put (14 :: Int32) Yields the lazy bytestring, "BM\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SO" > (where B is Data.ByteString) > > I'm wondering how I can: > > 1/ convert a 32 bit number (Int32, Char32) to 4 Char8 elements Data.Binary.put (x :: Int32) etc. > 2/ rotate bits/bytes in a 32 bit Char32 (or Int32) so they are > explicitly little-endian (I work on a mac powerbook, and it is big-endian) Use the little endian 'put' primitives, putWord32le (fromIntegral (7 :: Int32)) > 3/ convert an Integer or Int type to an Int32 type > > Any pointers or suggestions would be helpful. fromIntegral Data.Binary should support all this nicely, I hope. -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe