instance Show SockAddr

Tomasz Zielonka t.zielonka at students.mimuw.edu.pl
Sun Oct 17 18:03:27 EDT 2004


On Sun, Oct 17, 2004 at 11:57:49PM +0200, Peter Simons wrote:
> Tomasz Zielonka writes:
> 
>  >> ha2tpl :: HostAddress -> (Int, Int, Int, Int)
>  >> ha2tpl n =
>  >> let (b1,n1) = (n  .&. 255, n  `shiftR` 8)
>  >>     (b2,n2) = (n1 .&. 255, n1 `shiftR` 8)
>  >>     (b3,n3) = (n2 .&. 255, n2 `shiftR` 8)
>  >>     b4      = n3 .&. 255
>  >> in
>  >> (fromEnum b1, fromEnum b2, fromEnum b3, fromEnum b4)
> 
>  > This won't work on big-endian architectures.
> 
> Why not?

Because GHC keeps HostAddress in network-order (aka big-endian) but
Data.Bits works in host order. First octet of IP4 address is the most
significant byte in network-order word, but here you take it from
the least significant byte.

I assume that HostAddress on big-endian machines is also kept in
network-order - but there this is the same as the host-order, so if you
take the least significant byte you will get the last IP4 octet.

Best regards,
Tom

-- 
.signature: Too many levels of symbolic links


More information about the Libraries mailing list