перевернуть байты, используя структурный модуль Python - PullRequest
0 голосов
/ 03 февраля 2010

Я бы хотел перебросить строку с прямым порядком байтов в меньшую сторону:

\x00\x40

, чтобы она была такой:

\x40\x00

Полагаю, правильной функцией была бы struct.pack, но я не могу найти способ заставить ее работать должным образом.Небольшая помощь будет очень признателен!

Спасибо

Ответы [ 4 ]

6 голосов
/ 03 февраля 2010

Вы не показываете весь код, поэтому самое простое решение будет:

data = data[1] + data[0]

Если вы настаиваете на использовании struct:

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

Который сначала распаковывает строку как шорт без знака с прямым порядком байтов, а затем упаковывает ее обратно как шорт без знака с прямым порядком байтов Вы можете иметь это наоборот, конечно. При конвертации между BE и LE не имеет значения, в какую сторону вы конвертируете - функция конвертации является двунаправленной.

5 голосов
/ 03 февраля 2010

data[::-1] работает для любого количества байтов.

0 голосов
/ 13 марта 2011

Я мог бы представить, что на самом деле здесь нужно преобразовать входные данные от байтерера с прямым порядком байтов (или сети) в ваш хост-байтер (что бы это ни было).

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

Это был бы более переносимый подход, чем просто подкачка, которая обязательно приведет к сбою, когда код будет перенесен на машину с прямым порядком байтов, которая вообще не должна была бы переставляться.

0 голосов
/ 03 февраля 2010

little_endian = big_endian[1] + big_endian[0]

...