利用zlib库对HTTP收到的gzip数据解压
来源:互联网 发布:降维算法 编辑:程序博客网 时间:2024/06/03 01:33
1、首先说为什么采用zlib解压,因为zlib可以解压内存数据。
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);
0 0
- 利用zlib库对HTTP收到的gzip数据解压
- 利用zlib库对HTTP收到的gzip数据解压
- zlib对http中chunk数据解压
- 使用zlib实现gzip格式数据的压缩和解压
- 使用zlib实现gzip格式数据的压缩和解压
- Zlib库对网页中deflate压缩数据的解压
- 解压HTTP gzip的
- zlib内存解压gzip
- 关于http的gzip解压
- zlib gzip http
- LoadRunner中,利用zlib.dll对字符串进行gzip压缩
- centos下使用zlib库支持gzip流解压
- 获取http的gzip内容并解压
- 使用zlib压缩和解压gzip
- 解压web服务器返回的gzip数据
- Gzip压缩数据解压
- 使用zlib库函数实现http报文的解压
- zlib压缩库解压失败的问题
- js 查询IP归属地
- Android wifi对象属性及简易Demo
- 搭建iOS二维码扫描安装OTA服务器
- 从磁盘分区到安装文件系统、grub的过程
- Redis集群使用总结(一)
- 利用zlib库对HTTP收到的gzip数据解压
- 今天碰到的问题
- Spring整合JMS
- linux - echo
- springMVC@RequetMapping无法url映射方法问题
- Android图片上传队列Service
- 动态链接库使用.def导出一个c++类的函数
- 第一次前端电面面经分享(补充答案中)
- 如何在Eclipse中自定义类似syso的快捷代码模板