【问题标题】:How to decompress a hex string using zlib?如何使用 zlib 解压缩十六进制字符串?
【发布时间】:2020-08-05 21:04:40
【问题描述】:

我有一个使用 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"

编辑-我基本上将压缩数据包作为字符串获取。然后我运行一个解析程序,从压缩数据包中提取我需要的信息,以便告诉它如何继续解析。要获取该信息,我需要将数据包字符串拆分为字节(我使用一个简单的函数来执行此操作,该函数只获取前两个字符并将它们放在一起,将它们附加到一个空列表,然后继续下一个 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: a bytes-like object is required, not 'str' 似乎是我发现的最接近我的问题的东西(因为所有类似的错误),但我似乎仍然无法让它工作。

【问题讨论】:

  • 如何格式化数据,使其在字节之间有空格?如果问题很长,请在您的问题中添加执行此操作的代码(即不要试图在此处写下它是评论)。
  • @martineau 我基本上将压缩数据包作为字符串获取。然后我运行一个解析程序,从压缩数据包中提取我需要的信息,以便告诉它如何继续解析。要获取该信息,我需要将数据包字符串拆分为字节(我使用一个简单的函数来执行此操作,该函数只获取前两个字符并将它们放在一起,将它们附加到一个空列表,然后继续下一个 2,并再次追加直到结束)。后来,我最终加入了列表,中间有一个空格。

标签: python compression zlib python-3.8


【解决方案1】:

10 84 35 4F 3E A3 CE E1,当转换为字节时,不是zlib数据。它不以 zlib 标头开头,如果解释为原始 deflate 流则无效。

我建议您在另一端压缩后立即查看数据,并将其与您收到的数据进行比较。

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2010-12-31
    • 2012-07-31
    • 2020-06-01
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多