Byte Order Swapping Function

Andrew Wiley wiley.andrew.j at gmail.com
Thu Jul 14 00:03:23 PDT 2011


On Wed, Jul 13, 2011 at 11:59 PM, Jonathan M Davis <jmdavisProg at gmx.com>wrote:

> On Wednesday 13 July 2011 23:37:02 Andrew Wiley wrote:
> > Hey, does anyone else thing a function like this belongs in Phobos, and
> if
> > so, where do you think it should go?
> >
> > T ntoh(T)(T val) if (__traits(isArithmetic, T)) {
> > version(BigEndian) {
> >  return val;
> > }
> > else version (LittleEndian) {
> >  ubyte[] arr = (cast(ubyte*)&val)[0 .. T.sizeof];
> > ubyte temp;
> > for(int i = 0; i < T.sizeof/2; i++) {
> >  temp = arr[i];
> > arr[i] = arr[T.sizeof - i - 1];
> > arr[T.sizeof - i - 1] = temp;
> >  }
> > return val;
> > }
> >  else static assert(0, "Are you sure you're using a computer?");
> >  }
> >
> > I was looking for something along these lines in the docs today and
> couldn't
> > find it. It looks like there's a stream in std.stream to do this, but,
> > well, I think we've all been pretending std.stream doesn't exist for a
> > while now.
>
> core.sys.posix.arpa.inet.d
> std.c.windows.winsock.d
>

Both of those are platform specific, and neither of them is general enough
to handle longs.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20110714/7ab610ea/attachment.html>


More information about the Digitalmars-d mailing list