2010-02-03 12 views
0

je voudrais retourner de grand à petit endian cette chaîne:octets flip en utilisant le module struct Python

\x00\x40

d'avoir comme ceci:

\x40\x00

Je suppose que la bonne La fonction à utiliser serait struct.pack, mais je ne peux pas trouver un moyen de le faire fonctionner correctement. Une petite aide serait très appréciée!

Merci

Répondre

6

Vous ne montrez pas l'ensemble du code, de sorte que la solution serait simple:

data = data[1] + data[0] 

Si vous insistez sur l'utilisation struct:

>>> from struct import pack, unpack 
>>> unpack('<H', '\x12\x13') 
(4882,) 
>>> pack('>H', *unpack('<H', '\x12\x13')) 
'\x13\x12' 

qui a d'abord Désarchive chaîne comme un little-endian non signé court, et ensuite le remballe comme big-endian non signé court. Vous pouvez l'avoir dans l'autre sens, bien sûr. Lors de la conversion entre BE et LE, peu importe la façon dont vous convertissez - la fonction de conversion est bidirectionnelle.

0

little_endian = big_endian[1] + big_endian[0]

5

data[::-1] œuvres pour un nombre d'octets.

+1

Je pense que c'est une bien meilleure façon de le faire. –

0

Je pourrais faire l'image que ce que voudrait vraiment faire ici est de convertir les données d'entrée du gros byteorder (ou réseau) en votre byteorder (quel qu'il soit).

>>> from struct import unpack 
>>> result = unpack('>H', '\x00\x40') 

Ce serait une approche plus portable qu'un simple échange, qui est vouée à l'échec lorsque le code est déplacé à une grande machine à endian qui ne serait pas nécessaire d'échanger du tout.