Hi,
Is there some way I can check the endianness
of the machine my haskell code is running in?
Thanks,
MaurĂcio
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
I think something like this might work:
Prelude GHC.Exts GHC.Word let W64# x = 0x10002 in W32# (unsafeCoerce# x)
2
You should get 1 for big-endian and 2 for little-endian.
(Disclaimer: not particularily well-tested.)
-- ryan
On Thu, Dec 18, 2008 at 3:27 AM, Mauricio
Actually, this is probably safer:
import Foreign.Marshal.Alloc
import Foreign.Ptr
import Foreign.Storable
import Data.Word
import System.IO.Unsafe
endianCheck = unsafePerformIO $ alloca $ \p - poke p (0x01020304 ::
Word32) peek (castPtr p :: Ptr Word8)
littleEndian = endianCheck == 4
bigEndian
On Thursday 18 December 2008 13:40:47 Ryan Ingram wrote:
Actually, this is probably safer:
import Foreign.Marshal.Alloc
import Foreign.Ptr
import Foreign.Storable
import Data.Word
import System.IO.Unsafe
endianCheck = unsafePerformIO $ alloca $ \p - poke p (0x01020304 ::
Word32) peek
In a similar vein, is there already a function available to give the
size of Word in bytes? Or should I write the usual Ptr conversion tricks
to figure it out?
Holger Siegel wrote:
On Thursday 18 December 2008 13:40:47 Ryan Ingram wrote:
Actually, this is probably safer:
import
Foreign.Storable.sizeOf
wren:
In a similar vein, is there already a function available to give the
size of Word in bytes? Or should I write the usual Ptr conversion tricks
to figure it out?
Holger Siegel wrote:
On Thursday 18 December 2008 13:40:47 Ryan Ingram wrote:
Actually, this
On Thu, 2008-12-18 at 22:35 -0500, wren ng thornton wrote:
In a similar vein, is there already a function available to give the
size of Word in bytes? Or should I write the usual Ptr conversion tricks
to figure it out?
How about this:
(`div` 8) $ ceiling $ logBase 2 $ fromIntegral (maxBound