2009-08-28 4 views
33

私のコードが実行されているマシンがビッグエンディアンかリトルエンディアンのどちらであるかを調べる最良の方法を探しています。 (私はビッグエンディアンのマシン上でそれをテストしていないが)私は機能するソリューションを持っているが、それは少し不格好ようだ:エンディアンを決定する最もPythonの方法は何ですか?

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

これは、ほんの少しの「ネイティブ」2バイトのパックを比較しています-endian pack。もっときれいな方法がありますか?

+0

なぜ知りたいですか?あなたのソリューションは十分に良いと思われますが、確かに 'struct'自体を使用するときを知る必要はありませんか? – u0b34a0f6ae

+0

真実ですが、私は構造体モジュールを使用していません(おそらく私はそうすべきですが、私が修正しているコードの元の著者ではありません)。 –

答えて

73

答えはsys moduleである:もちろん

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

はそれが'big'を返すことがあり、マシンによって異なります。あなたの方法も確かに動作するはずです。

+4

はい、powerpcで '>>> sys.byteorder 'big''と表示されます – u0b34a0f6ae

関連する問題