资源简介
在http会话中,经常会遇到gzip压缩的内容。这部分内容通常是乱码,需要解压缩才能看到正常的内容。通常用zlib库只能对tar.gz文件进行解压缩。本源码解决了在内存中直接对gzip内容进行解压缩,从而对我们感兴趣的内容进行修改。
压缩函数和解压缩函数放在gzip.c文件里,头文件是gzip.h,其他则为zlib库文件。
在应用中,直接调用gzip.c文件里的压缩函数和解压缩函数即可。
本人项目中用到的,自己编译的,实测通过。

代码片段和文件信息
/* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-2011 Mark Adler
* For conditions of distribution and use see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#include “zutil.h“
#define local static
local uLong adler32_combine_ OF((uLong adler1 uLong adler2 z_off64_t len2));
#define base 65521 /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(base-1) <= 2^32-1 */
#define DO1(bufi) {adler += (buf)[i]; sum2 += adler;}
#define DO2(bufi) DO1(bufi); DO1(bufi+1);
#define DO4(bufi) DO2(bufi); DO2(bufi+2);
#define DO8(bufi) DO4(bufi); DO4(bufi+4);
#define DO16(buf) DO8(buf0); DO8(buf8);
/* use NO_DIVIDE if your processor does not do division in hardware --
try it both ways to see which is faster */
#ifdef NO_DIVIDE
/* note that this assumes base is 65521 where 65536 % 65521 == 15
(thank you to John Reiser for pointing this out) */
# define CHOP(a) \
do { \
unsigned long tmp = a >> 16; \
a &= 0xffffUL; \
a += (tmp << 4) - tmp; \
} while (0)
# define MOD28(a) \
do { \
CHOP(a); \
if (a >= base) a -= base; \
} while (0)
# define MOD(a) \
do { \
CHOP(a); \
MOD28(a); \
} while (0)
# define MOD63(a) \
do { /* this assumes a is not negative */ \
z_off64_t tmp = a >> 32; \
a &= 0xffffffffL; \
a += (tmp << 8) - (tmp << 5) + tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
if (a >= base) a -= base; \
} while (0)
#else
# define MOD(a) a %= base
# define MOD28(a) a %= base
# define MOD63(a) a %= base
#endif
/* ========================================================================= */
uLong ZEXPORT adler32(adler buf len)
uLong adler;
const Bytef *buf;
uInt len;
{
unsigned long sum2;
unsigned n;
/* split Adler-32 into component sums */
sum2 = (adler >> 16) & 0xffff;
adler &= 0xffff;
/* in case user likes doing a byte at a time keep it fast */
if (len == 1) {
adler += buf[0];
if (adler >= base)
adler -= base;
sum2 += adler;
if (sum2 >= base)
sum2 -= base;
return adler | (sum2 << 16);
}
/* initial Adler-32 value (deferred check for len == 1 speed) */
if (buf == Z_NULL)
return 1L;
/* in case short lengths are provided keep it somewhat fast */
if (len < 16) {
while (len--) {
adler += *buf++;
sum2 += adler;
}
if (adler >= base)
adler -= base;
MOD28(sum2); /* only added so many base‘s */
return adler | (sum2 << 16);
}
/* do length NMAX blocks -- requires just one modulo operation */
while (len >= NMAX) {
len -= NMAX;
n = NMAX / 16; /
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 358 2014-02-21 10:54 readme.txt
目录 0 2014-02-21 10:49 zlib\
文件 4968 2011-09-10 16:15 zlib\adler32.c
文件 2529 2012-08-13 00:02 zlib\compress.c
文件 13174 2012-04-29 16:18 zlib\crc32.c
文件 30562 2012-04-29 16:18 zlib\crc32.h
文件 71476 2013-04-28 15:57 zlib\deflate.c
文件 12774 2012-06-02 10:16 zlib\deflate.h
文件 678 2010-02-13 17:12 zlib\gzclose.c
文件 6552 2013-04-13 18:04 zlib\gzguts.h
文件 2354 2014-02-18 14:23 zlib\gzip.c
文件 368 2014-02-17 15:58 zlib\gzip.h
文件 16415 2013-03-24 22:47 zlib\gzlib.c
文件 18694 2013-03-24 22:47 zlib\gzread.c
文件 16199 2013-04-13 18:04 zlib\gzwrite.c
文件 22709 2012-08-13 00:02 zlib\infback.c
文件 13455 2013-03-24 22:47 zlib\inffast.c
文件 427 2010-04-18 21:16 zlib\inffast.h
文件 6332 2011-10-05 20:32 zlib\inffixed.h
文件 53512 2012-08-13 00:02 zlib\inflate.c
文件 6399 2009-12-25 17:32 zlib\inflate.h
文件 13028 2013-04-28 15:57 zlib\inftrees.c
文件 2928 2010-04-18 21:15 zlib\inftrees.h
文件 44255 2012-08-13 00:02 zlib\trees.c
文件 8472 2010-04-18 10:32 zlib\trees.h
文件 2003 2012-08-13 00:02 zlib\uncompr.c
文件 15508 2013-04-28 15:57 zlib\zconf.h
文件 87883 2013-04-28 17:23 zlib\zlib.h
文件 7414 2012-08-13 00:02 zlib\zutil.c
文件 6766 2013-03-24 22:47 zlib\zutil.h
- 上一篇:电子测量与仪器课后习题答案
- 下一篇:DLL注入HOOK进程按钮点击delphi
相关资源
- http请求状态代码
- QT 实现文件下载
- zlib 最新 1.2.8 win32 win64 编译好的dll
- lzw压缩,解压缩算法
- lz4压缩解压工具x64和x86
- 易语言 TCP使用HTTP、SOCKES5代理IP。
- Eclipse4.5汉化包 解压即可汉化
- http协议rfc2616中英文双版
- USB Serial Port win7 64/32 驱动后缀丢失,
- httpclient4.3工具类
- 地址转化器 迅雷,电驴,网盘,快车
- apache-httpd2.5安装及配置(包含教程及
- 易语言压缩解压模块
- 易语言HTTP连接请求源码
- okHTTP与HTTPS
- 解压加密的zip文件源码
- IE7,IE8下也能用的Httpwatch
- Huffman Compress 霍夫曼编码 压缩 解压缩
- pkavhttpfuzzer
- 百万常用暴力破解密码字典解压出来
- zlib1.dll 支持WinXP Win7 Win8 Win10
- Xshell6+Xftp6绿色_破解版解压后点击绿色
- Http Analyzer 7(http抓包工具)7 7.6.4破解
- STM32+BC20通过HTTP传输GPS北斗定位到湖畔
- 易语言 HTTPS模块
- RAR解压密码破解,最新版
- Netscaler中文配置手册.pdf
- fiddler 免安装
- pako gzip 压缩和解压缩支持中文
- Js算法 zip_deflate(压缩)与zip_inflate(
评论
共有 条评论