I by pure coincidence was fixing a bug in some code in GHC that
involved converting a Haskell float into a hex IEEE form, this is how
its done in the code, just to add another way :)

castDoubleToWord8Array :: STUArray s Int Double -> ST s (STUArray s Int Word8)
castDoubleToWord8Array = castSTUArray

doubleToBytes :: Double -> [Int]
doubleToBytes d
  = runST (do
       arr <- newArray_ ((0::Int),7)
       writeArray arr 0 d
       arr <- castDoubleToWord8Array arr
       i0 <- readArray arr 0
       i1 <- readArray arr 1
       i2 <- readArray arr 2
       i3 <- readArray arr 3
       i4 <- readArray arr 4
       i5 <- readArray arr 5
       i6 <- readArray arr 6
       i7 <- readArray arr 7
       return (map fromIntegral [i0,i1,i2,i3,i4,i5,i6,i7])
    )

The nice thing about this code is it is pure Haskell and doesn't
involve using any unsafe methods. You do have to handle the platform
endianess with this method though while for the others you don't.

On 22 September 2010 05:59, Daniel Fischer <daniel.is.fisc...@web.de> wrote:
> On Tuesday 21 September 2010 21:35:21, John Millikin wrote:
>> Oh, I misunderstood the question -- you're asking about architectures
>> on which floating-point and fixed-point numbers use a different
>> endianness?
>
> Basically, I wanted to know whether there are such beasts (apparently yes)
> and if, whether they're numerous enough to worry about (apparently no).
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to