pythonendianness

What's the most Pythonic way of determining endianness?


I'm trying to find the best way of working out whether the machine my code is running on is big-endian or little-endian. I have a solution that works (although I haven't tested it on a big-endian machine) but it seems a bit clunky:

import struct
little_endian = (struct.pack('@h', 1) == struct.pack('<h', 1))

This is just comparing a 'native' two-byte pack to a little-endian pack. Is there a prettier way?


Solution

  • The answer is sys module's attribute sys.byteorder:

    An indicator of the native byte order. This will have the value 'big' on big-endian (most-significant byte first) platforms, and 'little' on little-endian (least-significant byte first) platforms.

    Example:

    >>> import sys
    >>> sys.byteorder
    'little'
    

    Of course depending on your machine it may return 'big'. Your method should certainly work too though.