Search code examples
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.