2010-02-03 6 views
0

Я хотел бы переворачивать от большого к небольшой Endian эту строку:флип байт с использованием структуры модуля Питона

\x00\x40

иметь это так:

\x40\x00

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

Благодаря

ответ

6

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

data = data[1] + data[0] 

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

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

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

0

little_endian = big_endian[1] + big_endian[0]

5

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

+1

Я думаю, что это гораздо лучший способ сделать это. –

0

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

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

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