2009-08-28 8 views
33

J'essaie de trouver la meilleure façon de déterminer si la machine sur laquelle mon code s'exécute est big-endian ou little-endian. J'ai une solution qui fonctionne (bien que je ne l'ai pas testé sur une machine big-endian), mais il semble un peu maladroit:Quelle est la façon la plus pythonique de déterminer l'endianisme?

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

Ceci est simplement la comparaison d'un « natif » paquet de deux octets à un peu -Pack pack Y a-t-il une manière plus jolie?

+0

Pourquoi avez-vous besoin de savoir? Votre solution semble assez bonne, mais vous n'avez certainement pas besoin de savoir quand vous utilisez 'struct' lui-même? – u0b34a0f6ae

+0

C'est vrai, mais je n'utilise pas le module struct (peut-être que je devrais l'être, mais je ne suis pas l'auteur original du code que je corrige). –

Répondre

73

La réponse est dans le sys module:

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

Bien sûr en fonction de votre machine, il peut retourner 'big'. Votre méthode devrait certainement fonctionner aussi bien.

+4

oui sur un powerpc il dit '>>> sys.byteorder 'big'' – u0b34a0f6ae

Questions connexes