如何使用zlib解压十六进制字符串?

2024-05-29 08:14:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据包,它的一端使用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: a bytes-like object is required, not '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'似乎是我发现的最接近我的问题的东西(因为所有类似的错误),但我似乎仍然无法让它工作


Tags: 字符串data字节byteserror数据包hexstrcompressed
1条回答
网友
1楼 · 发布于 2024-05-29 08:14:08

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

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

相关问题 更多 >

    热门问题