c语言使用zlib实现文本字符的gzip压缩与gzip解压缩
网络上找到的好多方法在解压缩字符串的时候会丢失字符,这里是解决方法:
http://stackoverflow.com/questions/21186535/compressing-decompressing-char-array-using-zlib-some-characters-missing
基于此,笔者修改了一下,由于是初学者,只按照编译器不报错的原则修改了一下,能运行
打开vc++6.0新建控制台程序程序,配置好zdll.lib,把zlib1.dll放置到合适的位置
主程序main.cpp如下
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "zlib.h" int main()
{
const char *istream = "some foo汉字";
uLong srcLen = strlen(istream)+; // +1 for the trailing `\0`
uLong destLen = compressBound(srcLen); // this is how you should estimate size
// needed for the buffer
unsigned char* ostream = (unsigned char*)malloc(destLen);
int res = compress(ostream, &destLen, (const unsigned char *)istream, srcLen);
// destLen is now the size of actuall buffer needed for compression
// you don't want to uncompress whole buffer later, just the used part
if(res == Z_BUF_ERROR){
printf("Buffer was too small!\n");
return ;
}
if(res == Z_MEM_ERROR){
printf("Not enough memory for compression!\n");
return ;
} unsigned char *i2stream = ostream;
char* o2stream = (char *)malloc(srcLen);
uLong destLen2 = destLen; //destLen is the actual size of the compressed buffer
int des = uncompress((unsigned char *)o2stream, &srcLen, i2stream, destLen2);
printf("%s\n", o2stream);
return ;
}
c语言使用zlib实现文本字符的gzip压缩与gzip解压缩的更多相关文章
- 饼干是这样压缩的——PHP使用zlib扩展实现页面GZIP压缩输出
饼干是这样压缩的——PHP使用zlib扩展实现页面GZIP压缩输出 GZIP(GNU-ZIP)是一种压缩技术.经过GZIP压缩后页面大小可以变为原来的30%甚至更小.这样用户浏览的时候就会感觉很爽很愉 ...
- Swift语言指南(十)--字符串与字符
原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...
- 【Windows编程】系列第三篇:文本字符输出
上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接 ...
- (转)C语言16进制输出字符型变量问题
最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char ...
- 比较java与c语言中数字转换成字符的不同
java java中将数字转换成字符非常方便,只要用一个"+"然后在跟一个空格行了.比如,你输入一个122 ,就会变成"122 ". import java.u ...
- emWin显示文本字符-【worldsing笔记】
在emWin显示文本字符还是容易的,提供了各种不同的接口,下面是有关于字符显示的常用的用法,可以直接复制到VS2008的模拟ucGui(emWin模拟工程)中运行: 工程代码下载:1.emWin5.2 ...
- api (三)文本字符输出 (转)
在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大核心组件之一的GDI32.dll封装了所有的文本和 ...
- R语言csv与txt文本读入区分(sep参数)
R语言csv与txt文本读入区分 R语言用来处理数据很方便,而处理数据的第一步是把数据读入内存空间,平时最常用的文本数据储存格式有两种: 一种是CSV(逗号分隔符文本)另一种是TXT(Tab分隔符或空 ...
- C语言中以十六进制输出字符型变量会出现'ffffff"的问题
最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char ...
随机推荐
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
- 关于block的一些理解
之前一直都是用这别人或者是系统系统封装好的block,用这都挺好,可以访问那些定义了block变量的函数变量在block中使用. 首先总结一个block的用法:1.block有些类似于函数的指针 拥有 ...
- RMAN_学习笔记3_RMAN Catalog恢复目录
2014-12-23 Created By BaoXinjian
- do-while语句
一.语句格式格式1:do 语句1;while (条件表达式); 格式2:do { 语句1; 语句2; -}while (条件表达式); 语句执行过程:1.执行一遍循环体.2.求出作为循环条件的 ...
- SourceInsight 精确导入Linux kernel源码的方法
相信有很多人用 SourceInsight 查看 Linux Kernel 源码,但导入源码时会遇到一些问题.1.如果把整个源码树都导入进去,查看符号定义的时候,会发现有大量重复定义,很难找到正确的位 ...
- Jmeter组件3. HTTP Cookie Manager
两个坑的地方 如果一个域(scope)内有两个cookie manager,Jmeter说,我分不清了,你自己看着办吧,所以不要没事找事,一个域内一个cookie manager够了 用户自定义coo ...
- service对象
Service 对象 提供用于创建服务程序的一组工具 语法 Shell.Service[.property|method] 属性 Description 服务描述,仅限于 Windows 2000 及 ...
- php数组转换成json格式。
{ "touser":"OPENID", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0t ...
- Oracle 增加修改删除字段与添加注释
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...
- MessageFormat不支持{
转自 :http://zqc-0101.iteye.com/blog/1140140 MessageFormat用来格式化一个消息,通常是一个字符串,比如: String str = "I' ...