распаковать синтаксис в питоне 3 - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь преобразовать шестнадцатеричные числа в десятичные, используя распаковку.Когда я использую:

from struct import *
unpack("<H",b"\xe2\x07")

Вывод: 2018, что я и хочу.Дело в том, что у меня есть шестнадцатеричные данные в списке в виде строки в виде:

asd = ['e2','07']

Мой вопрос: есть ли простой способ распаковать без обратной косой черты, х?Примерно так:

unpack("<H","e207")

Я знаю, что это не работает, но я надеюсь, что вы поняли.

Для пояснения, я знаю, я мог бы получить данные в виде b'\x11'в списке, но затем он интерпретируется как ASCII, который мне не нужен, поэтому он у меня в формате, который я показал.

1 Ответ

0 голосов
/ 19 ноября 2018

У вас есть шестнадцатеричные данные в текстовом объекте. Итак, чтобы вернуться к необработанным шестнадцатеричным байтам, вы можете декодировать текстовую строку. Обратите внимание, что это не обычное соглашение в Python 3.x (обычно текстовые строки уже декодированы).

>>> codecs.decode('e207', 'hex')
b'\xe2\x07'

Удобная функция для одного и того же:

>>> bytes.fromhex('e207')
b'\xe2\x07'

Теперь вы можете struct.unpack эти байты. Собираем все вместе:

>>> asd = ['e2','07']
>>> text = ''.join(asd)
>>> encoded = codecs.decode(text, 'hex')
>>> struct.unpack("<H", encoded)
(2018,)
...