当前位置: 首页 > 知识库问答 >
问题:

如何从deflate压缩输出结果中解码deflate块报头

冷善
2023-03-14

我正在尝试根据deflate压缩输出的输出字节解码头位。

char a[50] = "Hello";
z_stream defstream;
defstream.zalloc = Z_NULL;
defstream.zfree = Z_NULL;
defstream.opaque = ZNULL;

defstream.avail_in = (uInt)strlen(a)+1;
defstream.next_in = (Bytef *)a;
defstream.avail_out = (uINt)sizeof(b);
defstream.next_out = (Bytef *)b;

deflateInit(&defstream, Z_BEST_COMPRESSION);
deflate(&defstream, Z_FINISH);
deflateEnd(&defstream);

for (int i=0; i<strlen(b); i++) {
  printf("--- byte[%d]=%hhx\n", i, b[i]);
}

结果:

--- byte[0]=78
--- byte[1]=da
--- byte[2]=f3

参考:放气规范

共有1个答案

吕树
2023-03-14

您正在创建一个zlib流,而不是一个原始的deflate流。所以78da是zlib头,而不是deflate压缩数据。deflate数据以F3开始。其中的低三位是011。低的1是BFINAL(这是最后一个块),01是BTYPE(固定的Huffman代码)。

 类似资料:
  • DEFLATE 是同时使用了哈夫曼编码(Huffman Coding)与 LZ77 算法的一个无损数据压缩算法,是一种压缩数据流的算法。任何需要流式压缩的地方都可以用。目前 zip 压缩文件默认使用的就是该算法。 关于算法的原理,以及 哈夫曼编码(Huffman Coding)与 LZ77 算法,感兴趣的读者可以查询相关资料,这里推荐 GZIP压缩原理分析——第五章 Deflate算法详解 序列文

  • 本文向大家介绍Nodejs关于gzip/deflate压缩详解,包括了Nodejs关于gzip/deflate压缩详解的使用技巧和注意事项,需要的朋友参考一下 0x01.关于 写http时候,在接收http请求时候,出现乱码,后来发现是gzip没有解压。 关于gzip/deflate压缩,有放入管道压缩,和非管道压缩方法。 0x02.管道压缩 Node中的I/O是异步的,因此对磁盘和网络的读写需要

  • 我有一个Spring启动应用程序使用webSocket和跺脚协议。自从我移动到Spring引导启动父版本1.3.0。M2我注意到一个额外的压缩头在webSocket握手,即。 Sec WebSocket扩展:permessage deflate 这一切对我来说都很好,但我希望在运行开发构建时有机会禁用此标头。当该头存在时,wireshark stomp堵塞似乎有问题。因此,问题是如何在扩展WebS

  • DoS Deflate 是一个轻量级的 bash shell 脚本,旨在协助阻止拒绝服务攻击的过程。它使用以下命令创建连接到服务器的 IP 地址列表及其总连接数。在软件层面,它是最简单、最容易的安装解决方案之一。 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 具有超过预先配置连接数量的 IP 地址会

  • 问题内容: 我想尝试将java.util.zip中的Deflate和Inflate类用于zlib压缩。 我可以使用Deflate压缩代码,但是在解压缩时却遇到此错误- 到目前为止,这是我的代码- 问题答案: 您想在这里做什么?您使用InflaterInputStream来解压缩数据,然后尝试再次将此解压缩后的数据传递给Inflater?使用其中之一,但不能同时使用。 这就是导致您的异常的原因。 除