Byte Order Swapping Function

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


On Thu, Jul 14, 2011 at 12:03 AM, Andrew Wiley <wiley.andrew.j at gmail.com>wrote:

> 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.
>

(However, they're also both faster than what I've written because I really
don't need a dynamic array for something like this)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20110714/515d8840/attachment.html>


More information about the Digitalmars-d mailing list