Как распаковать шестнадцатеричную строку с помощью zlib? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть пакет данных, который сжимается на одном конце с помощью zlib.

Мне нужно распаковать пакет данных на другом конце, используя Python (я также использую zlib).

Мне кажется, что это должно быть довольно просто, однако я не добился успеха.

В основном мои данные выглядят так:

# Compressed hex string (formatted by me with a space in between bytes):
compressed_hexstr = "10 84 35 4F 3E A3 CE E1"

EDIT - Я в основном получаю сжатый пакет данных в виде строки. Затем я запускаю программу синтаксического анализа для извлечения информации из пакета сжатых данных, которая мне нужна, чтобы сообщить ему, как продолжить синтаксический анализ. Чтобы получить эту информацию, мне нужно разбить строку пакета данных на байты (что я делаю с помощью простой функции, которая просто захватывает первые два символа и объединяет их, добавляя их в пустой список, а затем переходя к следующим 2, и снова добавляем до конца). Позже я присоединяюсь к списку с пробелом между ними.

decompressed = zlib.decompress(compressed_hexstr)
print(f"decompressed: {decompressed}")

Возвращает

TypeError: требуется объект, похожий на байты, а не 'str'

Я также преобразовал шестнадцатеричную строку в байты (с bytes.fromhex()) и в массив байтов (с bytearray.fromhex()).

Я получаю следующие ошибки:

Using bytes.fromhex(compressed_hexstr):
>> zlib.error: Error -3 while decompressing data: incorrect header check

Using bytes.fromhex(compressed_hexstr, -15):  **NOTE: I don't quite understand the wbits argument**
>> zlib.error: Error -3 while decompressing data: invalid stored block lengths

Using bytearray.fromhex(compressed_hexstr):
>> zlib.error: Error -3 while decompressing data: incorrect header check

Using bytearray.fromhex(compressed_hexstr, -15):
>> zlib.error: Error -3 while decompressing data: invalid stored block lengths

zlib TypeError: требуется объект, похожий на байты, а не str кажется наиболее близким к моей проблеме (из-за всех подобных ошибок), но я все еще могу ' Кажется, это не работает.

1 Ответ

1 голос
/ 06 августа 2020

10 84 35 4F 3E A3 CE E1, при преобразовании в байты не является данными zlib . Он не начинается с заголовка zlib, и он недействителен, если интерпретируется как необработанный поток дефлятирования.

Я рекомендую вам посмотреть данные сразу после их сжатия на другом конце и сравнить их с тем, что вы получают.

...