资源简介
在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
相关资源
- CXF实现SSL安全验证
- 使用cxf和spring开发基于https的webservi
- HttpMonitor.dll
- IOCP_API(2.4)
- 手把手教你做产品经理全套视频百度
- https VC实现的源代码
- OkHttpDemo.7z
- glide4.8加载https图片.zip
- 征途_pak图包查看和解压工具
- socks4代理/ 5和HTTP 1.1代理连接 客户端
- 异步HTTP请求及异步HTTP单元基于autoU
- C代码版本的HTTP POST上传文件/JSON
- 温度传感器
- myeclipse10破解压缩包
- 一个delphi封装的WinHttp
- lz4格式解压软件 x86和x64三星线刷包里
- Loadrunner 的HTTPS的测试配置
- 统一管理系统
- labview HTTP POST 通信程序 Demo.vi
- 使用HTTP上传文件到WEB服务器
- 一个huffman压缩解压算法源码
- Apache配置文件httpd.conf
- pkxarc文件解压
- springcloud 一整套,解压就能用
- Phoenix BIOS 解压程序 phcomp
- 火狐httprequester文件
- 易语言Http读文件API源码
- Quartus 18.0 破解器解压密码12345
- HTTP 简介PPT
- 高分一号/二号数据批量解压
评论
共有 条评论