2009-08-28 10 views
33

Ich versuche den besten Weg herauszufinden, ob die Maschine, auf der mein Code läuft, Big-Endian oder Little-Endian ist. Ich habe eine Lösung, die funktioniert (obwohl ich es nicht auf einer Big-Endian-Maschine getestet habe), aber es scheint ein wenig klobig:Was ist die pythonischste Methode, um Endianess zu bestimmen?

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

Dies ist nur ein ‚native‘ Zwei-Byte-Pack auf ein wenig zu vergleichen -Endian-Paket. Gibt es einen schöneren Weg?

+0

Warum müssen Sie wissen? Ihre Lösung scheint gut genug zu sein, aber Sie müssen sicherlich nicht wissen, wenn Sie 'struct' selbst verwenden? – u0b34a0f6ae

+0

Wahr, aber ich benutze nicht das Strukturmodul (vielleicht sollte ich sein, aber ich bin nicht der ursprüngliche Autor des Codes, den ich festlege). –

Antwort

73

Die Antwort ist in den sys module:

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

Natürlich auf Ihrem Rechner je es 'big' zurückkehren. Ihre Methode sollte allerdings auch funktionieren.

+4

ja auf einem PowerPC sagt es '>>> sys.byteorder 'big'' – u0b34a0f6ae

Verwandte Themen