Byte Order Swapping Function

Johannes Pfau spam at example.com
Thu Jul 14 02:03:22 PDT 2011


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.
There's also the bswap intrinsic in core.bitop. This always swaps the
byte order and it only works for uint, though.

-- 
Johannes Pfau



More information about the Digitalmars-d mailing list