【神经网络与深度学习】【C/C++】ZLIB学习2
Zlib文件压缩和解压
zlib使用手册:http://www.zlib.net/manual.html
zlib wince版:http://www.tenik.co.jp/~adachi/wince/
在这里,你可以查看基于各种操作系统平台的压缩与解缩代码实现。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
以下是经过测试的 WinCE 及 WinXP 下的代码
<<<<<<<<
第一步: 首先到http://www.zlib.net/下载个ZLIB,
WinXP: 解压缩后打开zlib-1.2.3\projects\visualc6\zlib.dsw,选择Win32 LIB Release 按F7编绎生成zlib.lib, zlib.dll.
WinCE: 下载一个for Windows CE 版的包,里面针对各种平台(ARM4, ARM4I, MIPS, X86)有对应的zlibce.dll zlibce.lib.
<<<<<<<<
第二步: 建立EVC 或者 VS2005 的对话框工程.
在工程中添加以下文件:zlib.h, zconf.h, zlib.lib, zlib.dll (或者 zlibce.dll);
这3个文件就在刚才从http://www.zlib.net/下载的软件包中.
<<<<<<<<
第三步: 包含头文件
#include "zlib.h"
主要使用fopen等C标准接口实现的,只用到zlib的Compress()和UnCompress()接口;里面的条件编译是针对PC和WCE的
封装的类:
class CZlib
{
public:
CZlib();
~ CZlib();
int Compress(char * DestName,const char *SrcName);
int UnCompress(char * DestName,const char *SrcName);
};
接口实现:
压缩

{
] = {}; //压缩文件时的源buffer
FILE* fp; //打开欲压缩文件时文件的指针
FILE* fp1; //创建压缩文件时的指针
errno_t err; //错误变量的定义
#ifdef WINDOWS_PLATFORM
err = fopen_s(&fp,SrcName,"r+b");//打开欲压缩的文件
if(err)
{
printf("文件打开失败! \n");
;
}
#endif
#ifdef WINDOWS_CE_PLATFORM
fp = fopen_s(SrcName,"r+b");//打开欲压缩的文件
if(fp)
{
printf("文件打开失败! \n");
;
}
#endif
//获取文件长度
long cur = ftell(fp);
fseek(fp,0L,SEEK_END);
long fileLength = ftell(fp);
fseek(fp,cur,SEEK_SET);
//读取文件到buffer
fread(SourceBuffer,fileLength,,fp);
fclose(fp);
//压缩buffer中的数据
uLongf SourceBufferLen=;
);
err=compress((Bytef*)DestBuffer,(uLongf*)&SourceBufferLen,(const Bytef*)SourceBuffer,(uLongf)fileLength);
if(err!=Z_OK)
{
cout<<"压缩失败:"<<err<<endl;
;
}
//创建一个文件用来写入压缩后的数据
err = fopen_s(&fp1, DestName,"w+b");
if(!fp1)
{
printf("压缩文件创建失败! \n");
;
}
fwrite(DestBuffer,SourceBufferLen,,fp1);
fclose(fp1);
;
}

解压

{
] = {}; //解压缩文件时的源buffer
FILE* fp3; //打开欲解压文件的文件指针
FILE* fp4; //创建解压文件的文件指针
errno_t err; //错误变量的定义
//打开欲解压的文件
err = fopen_s(&fp3,SrcName,"r+b");
if(err)
{
printf("文件打开失败! \n");
;
}
//获取欲解压文件的大小
long ucur = ftell(fp3);
fseek(fp3,0L,SEEK_END);
long ufileLength = ftell(fp3);
fseek(fp3,ucur,SEEK_SET);
//读取文件到buffer
fread(uSorceBuffer,ufileLength,,fp3);
fclose(fp3);
uLongf uDestBufferLen=;//此处长度需要足够大以容纳解压缩后数据
);
//解压缩buffer中的数据
err=uncompress((Bytef*)uDestBuffer,(uLongf*)&uDestBufferLen,(Bytef*)uSorceBuffer,(uLongf)ufileLength);
if(err!=Z_OK)
{
cout<<"解压缩失败:"<<err<<endl;
;
}
//创建一个文件用来写入解压缩后的数据
err = fopen_s(&fp4,DestName,"wb");
if(err)
{
printf("解压缩文件创建失败! \n");
;
}
printf("写入数据... \n");
fwrite(uDestBuffer,uDestBufferLen,,fp4);
fclose(fp4);
;
}

测试代码:
test.Compress("1.zip","test.docx");
test.UnCompress("11.docx","1.zip");
上述代码对于大文件就不适合了,因为是一次读出,一次写入的,下面是针对大文件的改进,分批读,分批写,代码如下:

{
FILE * fp_in = NULL;;];
WF_Error re = WF_OK;
if( NULL == (fp_in = fopen(SrcName,"rb")))
{
return WF_FAIL;
}
/////////////////////////////////////////////
gzFile out = gzopen(DestName,"wb6f");
if(out == NULL)
{
return WF_FAIL;
}
for(;;)
{
len = fread(buf,,sizeof(buf),fp_in);
if(ferror(fp_in))
{
re = WF_FAIL;
break;
}
) break;
if(gzwrite(out, buf, (unsigned)len) != len)
{
re = WF_FAIL;
}
}
gzclose(out);
fclose(fp_in);
return re;
}
WF_Error CZlib::UnCompress(const char * DestName,const char *SrcName)
{
FILE * fp_out = NULL;WF_Error re = WF_OK;
gzFile ;];
in = gzopen(SrcName,"rb");
if(in == NULL)
{
return WF_FAIL;
}
if(NULL == (fp_out = fopen(DestName,"wb")))
{
gzclose(in);
return WF_FAIL;
}
for (;;)
{
len = gzread(in,buf,sizeof(buf));
)
{
re = WF_FAIL;
break;
}
) break;
,(unsigned)len,fp_out)!=len)
{
re = WF_FAIL;
break;
}
}
fclose(fp_out);
gzclose(in);
return re;
}

【神经网络与深度学习】【C/C++】ZLIB学习2的更多相关文章
- (转)神经网络和深度学习简史(第一部分):从感知机到BP算法
深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...
- 【译】神经网络与深度学习 Ch1-Section0
用神经网络识别手写数字 人类的视觉系统是是大自然的奇迹.考虑下面手写数字序列: 大多数人能够轻易地是识别出是504192.在我们大脑的每个半球都有一个基础的皮质,这就是我们熟知的V1区,它包含了14亿 ...
- Neural Networks and Deep Learning(神经网络与深度学习) - 学习笔记
catalogue . 引言 . 感知器及激活函数 . 代价函数(loss function) . 用梯度下降法来学习-Learning with gradient descent . 用反向传播调整 ...
- [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈
觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...
- Deep Learning.ai学习笔记_第一门课_神经网络和深度学习
目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】
[吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [ ]AI为我们的家庭和办公室的个人设备供电 ...
- 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF
随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...
- 如何理解归一化(Normalization)对于神经网络(深度学习)的帮助?
如何理解归一化(Normalization)对于神经网络(深度学习)的帮助? 作者:知乎用户链接:https://www.zhihu.com/question/326034346/answer/730 ...
- 【神经网络与深度学习】卷积神经网络(CNN)
[神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...
随机推荐
- 2019 Red PCB KESS V5.017:支持140协议
2019红色PCB KESS V5.017 是一种流行的汽车ECU的编程器.这里分享一下这个设备的信息. KESS V2介绍: 型号名称:KESS V2 Master软件版本:V2.47(最新)固件版 ...
- Monkey初步使用
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 允许有条件转载,转载请附带底部二维码. 一.什么是Monkey Monkey是Android自身提供的,可以通 ...
- The Semantics of Constructors: The Default Constructor (默认构造函数什么时候会被创建出来)
本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default co ...
- Hibernate 5 开始使用指南前言
同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时.数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高. Hibernate 是一个针对 Java 环境的对象关系映射(Objec ...
- Confluence 6.15 附件(Attachments )宏
附件宏显示添加到一个页面中的所有文件列表. 同时附件宏允许用户(用户需要具有正确的权限)来进行下面的操作: 直接从列表中上传一个文件到页面 编辑附件属性和标签 删除一个附件文件(这个将会删除文件的所有 ...
- UVA 315 求割点 模板 Tarjan
D - D Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Pract ...
- 通过nginx转发,用外网连接阿里云的redis,报Unexpected end of stream的解决办法
一.在与redis同一个内网的服务器上A的nginx做了下面的设置 stream { upstream redis { server redis.rds.aliyuncs.com:6379 max_ ...
- Fragment中 监听Android 返回按钮事件
@Override public void onResume() { super.onResume(); getView().setFocusableInTouchMode(true); getVie ...
- Vue_(组件通讯)父组件向子组件传值
Vue组件 传送门 父组件向子组件传值:父组件通过属性向下传值的方式和子组件通信: 使用步骤: 1.定义组件:现有自定义组件com-a.com-b,com-a是com-b的父组件 2.准备获取数据:c ...
- Vue_(组件通讯)动态组件
动态组件 传送门 在一个元素上挂载多个组件,根据不同状态进行切换的时候,可以使用动态组件 动态组件的使用:需要使用内置组件<component></component>,根据 ...