我有一个以前由以下人员生成的字符串:
看起来像这样:
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 ,所以也许这会引起问题? ZIPC之后的部分包含有关二进制文件长度和压缩数据长度的数据。
谢谢