2009-08-28 23 views
33

Estoy tratando de encontrar la mejor manera de determinar si la máquina en la que se ejecuta mi código es big-endian o little-endian. Tengo una solución que funciona (aunque no lo he probado en una máquina-big endian), pero parece un poco torpe:¿Cuál es la forma más pitonica de determinar endianness?

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

Esto es sólo la comparación de un paquete de dos bytes 'nativo' a una pequeña paquete indio ¿Hay alguna manera más bonita?

+0

¿Por qué lo necesita saber? Su solución parece lo suficientemente buena, pero ciertamente no tiene que saber cuándo usar 'struct' en sí mismo? – u0b34a0f6ae

+0

Cierto, pero no estoy usando el módulo struct (quizás debería ser, pero no soy el autor original del código que estoy corrigiendo). –

Respuesta

73

La respuesta está en la sys module:

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

Por supuesto, dependiendo de su máquina puede volver 'big'. Sin embargo, tu método debería funcionar también.

+4

sí en un powerpc dice '>>> sys.byteorder 'big'' – u0b34a0f6ae

Cuestiones relacionadas