2009-08-28 11 views
33

Sto cercando di trovare il modo migliore per capire se la macchina su cui è in esecuzione il mio codice è big-endian o little-endian. Ho una soluzione che funziona (anche se non ho ancora testato su un big-endian della macchina), ma sembra un po 'goffo:Qual è il modo più pitonico per determinare l'endianità?

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

Questo è solo confrontando una confezione di due byte 'nativo' per un po' pacchetto -endian. C'è un modo più carino?

+0

Perché hai bisogno di sapere? La tua soluzione sembra abbastanza buona, ma certamente non devi sapere quando usi 'struct' stessa? – u0b34a0f6ae

+0

Vero, ma non sto usando il modulo struct (forse dovrei esserlo, ma non sono l'autore originale del codice che sto correggendo). –

risposta

73

La risposta è nel sys module:

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

Naturalmente a seconda della macchina, può restituire 'big'. Il tuo metodo dovrebbe sicuramente funzionare anche se.

+4

sì su un powerpc si dice '>>> sys.byteorder 'big'' – u0b34a0f6ae

Problemi correlati