【发布时间】: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