Заархивированная строка base64, как декодировать обратно в строку? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть строка, которая была сгенерирована ранее:

  1. Сжатие двоичных данных
  2. Кодирование сжатых данных с помощью base64 ascii

и что выглядит так:

ZIPC34020000DD000000eAFjZWBgWOrGcIgZSDMCMQODgz2YghIQMQYGVrhggz1CLVwQzMCvtoEoc5nAJoHUIjCmuQh7MeUa7K0lQaYwgv1jeNrFD8QW3x5oAdL1pmLtA5DZQDphw6pVth8t+MB2QewFqWBgOHxhwj4otgPSdiAxZHfhlgepBAJQYMEcBhYAE7AAaLDHkAMJSAKxv7Onv0JqXllmUX5ebmpeiUJZYlFmYlJOqjhQMrQkMyezpFJBV8EnMy81sQjIKA5ydwKZzQLEIDa6weh8kFpCAKxH4bQrKJbRAcQ8ADNBQpQ=

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

def zip_b64_data(np_array_data):
    array_data = np_array_data.tobytes()
    array_data_len = len(array_data)
    zipped_array_data = zlib.compress(array_data)
    zip_len = len(zipped_array_data)
    zipc_string = "ZIPC"+(swap32(array_data_len)+swap32(zip_len)).upper()
    return zipc_string+str(base64.b64encode(zipped_array_data), "ascii")

def swap32(i):
    return "{:08x}".format(struct.unpack("<I", struct.pack(">I", i))[0])

Это то, что я сейчас имею для кодирования:

import zlib
import struct
import base64

encoded_data = "eAFjZWBgWOrGcIgZSDMCMQODgz2YghIQMQYGVrhggz1CLVwQzMCvtoEoc5nAJoHUIjCmuQh7MeUa7K0lQaYwgv1jeNrFD8QW3x5oAdL1pmLtA5DZQDphw6pVth8t+MB2QewFqWBgOHxhwj4otgPSdiAxZHfhlgepBAJQYMEcBhYAE7AAaLDHkAMJSAKxv7Onv0JqXllmUX5ebmpeiUJZYlFmYlJOqjhQMrQkMyezpFJBV8EnMy81sQjIKA5ydwKZzQLEIDa6weh8kFpCAKxH4bQrKJbRAcQ8ADNBQpQ="
base64_decoded = base64.b64decode(encoded_data)
decompressed_data = zlib.decompress(base64_decoded)
print(decompressed_data)
print(str(decompressed_data, 'ascii'))

Я получаю сообщение об ошибке при последней печати, где я пытаюсь преобразовать двоичные данные в строку, либо у меня есть какая-то ошибка, либо decompressed_data неверен. Я исключил эту часть ZIPC34020000DD000000 из строки, так что, может быть, это вызывает проблемы? Раздел после ZIP C содержит данные о длине двоичного файла и длине сжатых данных.

Спасибо

...