gzip解压
来源:互联网 发布:sql数据库服务器 编辑:程序博客网 时间:2024/06/11 12:35
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;
- }
eg:
char* pDest = new char[1024 * 16];
uLong ulLength = 1024*16;
gzdecompress((Byte*)precvBuff, nCount, (Byte*)pDest, &ulLength);
0 1
- gzip解压
- gzip解压
- gzip解压
- gzip解压
- zlib内存解压gzip
- gzip解压和压缩
- j2me解压GZIP
- Gzip压缩和解压
- GZIP压缩解压类
- gzip数据流解压
- 解压HTTP gzip的
- GZIP压缩和解压
- 客户端的gzip解压
- Gzip解压和压缩
- gzip解压报错
- IOS解压GZIP
- android gzip,zip解压
- iOS gzip解压
- Swift 元组(tuples)
- 成员修饰符的用法
- 网络流之最大流学习、
- 一,如何监控和解决SQL Server的阻塞(1) (当前阻塞)
- 我们的潜力远远超过我们的想象
- gzip解压
- 关于批处理文件的执行方法
- NSIS + QT 做安装卸载程序
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 云客Drupal8源码分析之Session系统
- 嵌入式 c语言基础3
- Java与算法之(10) - 希尔排序
- @Override 在编译器中报错
- python2设置系统默认编码为utf-8