利用zlib库对HTTP收到的gzip数据解压
2016-05-20 18:04
537 查看
1、首先说为什么采用zlib解压,因为zlib可以解压内存数据。
2、下载zlib库后,自己在projcts目录里面根据需要编译lib库
3、静态链接只需要zlib.h ;zconf.h;zlib.lib三个文件即可(动态的不介绍了)
4、解压函数:
eg:
char* pDest = new char[1024 * 16];
uLong ulLength = 1024*16;
gzdecompress((Byte*)precvBuff, nCount, (Byte*)pDest, &ulLength);
2、下载zlib库后,自己在projcts目录里面根据需要编译lib库
3、静态链接只需要zlib.h ;zconf.h;zlib.lib三个文件即可(动态的不介绍了)
4、解压函数:
/* HTTP gzip decompress */ int httpgzdecompress(Byte *zdata, uLong nzdata, Byte *data, uLong *ndata) { int err = 0; z_stream d_stream = { 0 }; /* decompression stream */ static char dummy_head[2] = { 0x8 + 0x7 * 0x10, (((0x8 + 0x7 * 0x10) * 0x100 + 30) / 31 * 31) & 0xFF, }; d_stream.zalloc = (alloc_func)0; d_stream.zfree = (free_func)0; d_stream.opaque = (voidpf)0; d_stream.next_in = zdata; d_stream.avail_in = 0; d_stream.next_out = data; //if (inflateInit2(&d_stream, -MAX_WBITS) != Z_OK) return -1; if (inflateInit2(&d_stream, 47) != Z_OK) return -1; while (d_stream.total_out < *ndata && d_stream.total_in < nzdata) { d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */ if ((err = inflate(&d_stream, Z_NO_FLUSH)) == Z_STREAM_END) break; if (err != Z_OK) { if (err == Z_DATA_ERROR) { d_stream.next_in = (Bytef*)dummy_head; d_stream.avail_in = sizeof(dummy_head); if ((err = inflate(&d_stream, Z_NO_FLUSH)) != Z_OK) { return -1; } } else return -1; } } if (inflateEnd(&d_stream) != Z_OK) return -1; *ndata = d_stream.total_out; return 0; }直接调用就OK了 注意传入的buffer数据和长度都要赋值
eg:
char* pDest = new char[1024 * 16];
uLong ulLength = 1024*16;
gzdecompress((Byte*)precvBuff, nCount, (Byte*)pDest, &ulLength);
相关文章推荐
- iOS开发常用开源框架——网络
- ubuntu运维--网络配置
- MFC使用HttpGet和HttpPost方法与服务器通信
- HttpClient的psot方式
- JAVA 通过 Socket 实现 TCP 编程
- OC下载网络数据简介
- 网络WireShark进行抓包
- IP Forwarding打开
- APC UPS 网络管理卡(型号apc ap9631)的配置
- APC UPS 网络管理卡(型号apc ap9631)的配置
- XenServer网络堆栈Open vSwitch模式介绍
- XenServer网络堆栈Bridge模式介绍
- Http Test测试工具说明
- Win7系统删除网络驱动器盘符
- ByteBuffer 到底怎么用?网络编程中一点总结!
- Git 安装和配置(网络代理的设置)
- Win7系统删除网络驱动器盘符
- TCP与UDP的区别
- 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
- Apache Httpd + PHP环境