c++ http gzip压缩解压缩
/* 压缩 data 原数据 ndata 原数据长度 zdata 压缩后数据 nzdata 压缩后长度 */
int httpgzcompress(Bytef *data, uLong ndata, Bytef *zdata, uLong *nzdata)
{z_stream c_stream;int err = 0;if (data && ndata > 0) {c_stream.zalloc = NULL;c_stream.zfree = NULL;c_stream.opaque = NULL;//只有设置为MAX_WBITS + 16才能在在压缩文本中带header和trailerif (deflateInit2(&c_stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED,MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK) return -1;c_stream.next_in = data;c_stream.avail_in = ndata;c_stream.next_out = zdata;c_stream.avail_out = *nzdata;while (c_stream.avail_in != 0) {if (deflate(&c_stream, Z_NO_FLUSH) != Z_OK) return -1;}if (c_stream.avail_in != 0) return c_stream.avail_in;for (;;) {if ((err = deflate(&c_stream, Z_FINISH)) == Z_STREAM_END) break;if (err != Z_OK) return -1;}*nzdata = c_stream.total_out;if (deflateEnd(&c_stream) != Z_OK) return -1;return 0;}return -1;
}/*解压*/
int httpgzdecompress(Byte *zdata, uLong nzdata, Byte *data, uLong *ndata)
{int err = 0;z_stream d_stream = { 0 }; /* decompression stream */unsigned char dummy_head[2] = { 0x1F, 0x8B };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_in < nzdata) {d_stream.avail_in = d_stream.avail_out = 2048; /* 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;}}*ndata = d_stream.total_out;if (inflateEnd(&d_stream) != Z_OK) return -1;return 0;
}
库是zlib,压缩后还可以进行加密,对数据体进行加密就行了。头加入: "Content-Encoding: gzip";
c++ http gzip压缩解压缩相关推荐
- 数据的gzip压缩解压缩_使用GZIP和压缩数据
数据的gzip压缩解压缩 抽象 我们都知道用zip或gzip压缩文件的含义. 但是在Java中使用压缩文件并不像您想的那样简单,特别是如果您不是直接使用文件而是压缩流数据时. 我们会去: 如何将字符串 ...
- python利用gzip压缩解压缩StringIO
python利用gzip压缩解压缩StringIO When working with a data stream instead of a file, use the GzipFileclass d ...
- c#实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#实现gzip压缩解压缩byte[]字节数组,文件,字符串. 测试代码 static void Main() {//测试字符串String inpu ...
- java实现linux中gzip压缩解压缩算法:byte[]字节数组,文件,字符串,数据流的压缩解压缩
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现gzip压缩解压缩byte[]字节数组,文件,字符串. 测试代码 public static void main(String[] a ...
- C++zlib库实现的GZIP压缩解压缩工具类【多图警告^_^】
前几天和服务端同事联调TCP传输压缩后的Json串,遇到了 GZIP压缩问题. 需要把原来使用的的压缩算法和后端统一,现在来总结一下. [注意] 这里就以Windows的Debug环境为例,Relea ...
- python gzip压缩_Python gzip –压缩解压缩
python gzip压缩 Python gzip module provides a very simple way to compress and decompress files and wor ...
- 一句代码实现gzip压缩解压缩
import inet.whttp; var http = inet.whttp(); var str = http.get("http://www.sohu.com"," ...
- protobuf gzip压缩 解压缩的使用方法
#include <google/protobuf/io/gzip_stream.h> #include <google/protobuf/io/zero_copy_stream_i ...
- linux gzip压缩/解压缩*.gz文件
gzip命令是常用的压缩和解压缩命令. 语法帮助使用gzip --help可以查看使用手册: -c, --stdout write on standard output, keep original ...
最新文章
- 基于visual Studio2013解决面试题之0901奇偶站队
- 《预训练周刊》第15期:Bengio, Lecun, Hinton | 人工智能深度学习、用于图像分类的全局过滤网络...
- 清华自动驾驶前沿报告!解密六大关键技术,全球人才分布【附下载】| 智东西内参...
- .NET字符串操作类StringHelper (C#版)
- angr学习笔记(13)(static_binary)
- [LeetCode] Valid Anagram - 字符串排序比较系列
- 烧脑又过瘾!关于c²= b² + a²,你不知道的N个事实
- 检验int值在list中是否存在_R语言统计与绘图:卡方检验
- iOS工程师常用的命令行命令总结
- 江苏大学21考研计算机技术上岸
- anaconda打开python文本编辑器_【python】anaconda中打开IDLE(python 自带编辑器)
- 花式沉默Defender
- 怎么样绘制简易地图,如何制作一个电子地图?
- mac屏幕保护SaveHollywood安装方法
- 什么是RoIPooling和ROIAlign
- 初入react.js
- 大数据(Big Data)扫盲
- 【第39期】打破“打工人”魔咒,RPA 来狙击!
- 宇信科技收购鸿蒙,宇信科技(300674)12月26日14:30大单揭秘
- Pointofix安装与设置为中文