У меня есть строка, которая была сгенерирована ранее:
- Сжатие двоичных данных
- Кодирование сжатых данных с помощью 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 содержит данные о длине двоичного файла и длине сжатых данных.
Спасибо