46

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?

Major Major
  • 10,286
  • 4
  • 19
  • 9
  • Why do you need to know? Your solution seems good enough, but you certainly don't have to know when using 'struct' itself? – u0b34a0f6ae Aug 28 '09 at 09:57
  • True, but I'm not using the struct module (perhaps I should be, but I'm not the original author of the code I'm fixing). – Major Major Aug 28 '09 at 10:34

1 Answers1

111

The answer is in the sys module:

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

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

Scott Griffiths
  • 21,438
  • 8
  • 55
  • 85