实习项目中涉及到获取GigEVision设备的XML设备描述文件

A GigE Vision device MUST have an XML device description with the syntax described

in the GenApi module of the GenICam standard.

XML文件有两种形式:压缩的(.zip)XML文件,和未压缩的(.xml)XML文件

对应两种url描述:

1)Local:MER-200-14Gx_V1.0.29.zip;40ba0000;c350

2)Local:eco655MVGE_r2_v1.6.0_b2545.xml;10000;271DC

对于未压缩的.xml文件,直接读取就行;对于压缩的.zip文件,需要进行解压缩

于是去了解了zip文件的压缩原理,推荐文章:http://blog.csdn.net/ljh0302/article/details/50381470

发现zip的压缩原理还是比较复杂的,要手动去写一个zip的解压缩程序还是很费力,于是考虑用已有的解压缩的库zlib来实现。

一、下载并配置zlib

系统Win7 64位

官网下载编译好的DLL:zlib128-dll.zip,官网地址http://www.zlib.net/ 选择如下的版本

zlib compiled DLL,version 1.2.8, zipfile format (139K, MD5 checksum 42eccc2af5bac6b7a1188d7817d03549):

同时我上传了一份资源,地址:http://download.csdn.net/detail/ljh0302/9373083

在VS2010中使用zlib的静态库

将zlib128-dll/include 中的zconf.h 和 zlib.h加入工程的目录下,并且添加作为头文件

将zlib128-dll/lib中的zdll.lib复制到工程的资源目录

将zlib-128-dll/zlib1.dll放入C:\Windows\SysWOW64(因为系统是64位,32位则放入C:\\Windows\\System32)

配置文件项目-属性-链接器-输入,在附加依赖项中加入zdll.lib,在忽略特定默认库中加入MSVCRT

最后在使用的时候include头文件即可

#include "zconf.h"

#include "zlib.h"

#pragma comment(lib,"zdll.lib")

注意:

这里的项目必须是win32的,因为编译好的zlib dll是32位的,而且官网上好像只提供了这一种,换成x64是不可行的

二、如果希望x64的工程能够使用zlib呢?

下载zlib128.zip自己进行编译,我上传一份资源,地址:http://download.csdn.net/detail/ljh0302/9373381

如何编译参考文章:http://blog.sina.com.cn/s/blog_6e0693f70100sjgj.html

不过进行的编译的时候会报错LINK : fatal error LNK1104: 无法打开文件“x64\ZlibDllDebug\zlibwapi.lib”

虽然最后只用静态库是可以,但是一直不清楚这个错误是为什么,求教知道的同行

而我只使用了zconf.h zlib.h 和zlibstat.lib三个文件,利用静态库,配置很简单,如下

#include "zconf.h"

#include "zlib.h"

即可

三、zlib库函数的使用

1、int compress(Bytef *dest, uLongf *destLen, const Bytef* source, uLong sourceLen);

compress函数将source缓冲区的内容压缩到dest压缩区。sourceLen表示source缓冲区的大小(以字节计)。

destLen是传址调用,当调用函数的时候,destLen表示dest缓冲区的大小 destLen>(sourceLen + 12)*100.1%

或者使用compressBound(sourceLen),当函数退出,destLen表示压缩后缓冲区的实际大小

compress 若成功,返回Z_OK,若没有足够内存,返回Z_MEM_ERROR,若缓冲区不够大,则返回Z_BUF_ERROR

2、int uncompress(Bytef *dest ,uLongf *destLen, const Bytef*source, uLong sourceLen);

uncompress函数将source缓冲区的内容解压缩到dest缓冲区。sourceLen是source缓冲区的大小,destLen是传址调用,dest缓冲区必须足以容下解压后的数据,函数退出后,destLen是解压后的数据的实际大小

uncompress若成功,则返回Z_OK,若没有足够内存,则返回Z_MEM_ERROR,若输出缓冲区不够,则Z_BUF_ERROR,若输入数据有误,则返回Z_DATA_ERROR

#include "zconf.h"
#include "zlib.h"
#include <iostream>
using namespace std;#pragma comment(lib,"zdll.lib")int main()
{int err;Byte compr[200],uncompr[200];uLong comprLen,uncomprLen;const char* hello = "1213135454646544665456465465457877874655312333131";uLong len = strlen(hello)+1;comprLen = sizeof(compr)/sizeof(compr[0]);err = compress(compr,&comprLen,(const Bytef*)hello,len);if(err != Z_OK){cerr<<"compress error: "<<err<<endl;exit(1);}cout<<"original size: "<<len<<" ,compressed size: "<<comprLen<<endl;strcpy((char*)uncompr,"garbage");err = uncompress(uncompr,&uncomprLen,compr,comprLen);if(err != Z_OK){cerr<<"uncompress error: "<<err<<endl;exit(1);}else{cout<<"uncompress() succeed: "<<endl;cout<<(char*)uncompr<<endl;}return 0;
}

结果:

Zlib库的使用实现对zip文件的解压缩相关推荐

  1. 使用go语言GUI库实现对mp3文件的播放1(简单的播放mp3文件)

    使用go语言GUI库实现对mp3文件的播放1(简单的播放mp3文件) 使用beep播放mp3文件(10num) 使用go语言GUI库fyne实现音乐播放器 要是想使用go语言实现播放mp3需要借助be ...

  2. java如何解压rar文件怎么打开_如何在java中实现对zip和rar文件的解压

    如何在java中实现对zip和rar文件的解压 关注:101  答案:1  mip版 解决时间 2021-01-26 10:50 提问者芣①樣哋羙莮 2021-01-25 22:44 如何在java中 ...

  3. java实现对rar文件和zip文件的解压缩

    java实现对rar文件和zip文件的解压缩 一.对zip文件的解压缩 1.1 使用ZIP4J实现 zip4j官方说明: Create, Add, Extract, Update, Remove fi ...

  4. 用定制标签库和配置文件实现对JSP页面元素的访问控制

    用定制标签库和配置文件实现对JSP页面元素的访问控制 控制客户端访问是开发一个基于B/S的架构的系统的开发者必须考虑的问题.JSP或SERVLET规范的基于配置文件的安全策略对资源的控制是以文件为单位 ...

  5. 修改html时webpack热更新,利用webpack实现对html文件的热更新

    webpack中webpack-dev-server是一个简单的web服务器,能够帮助咱们实现代码的热更新,即在实际开发中只需保存修改完后的代码,不用手动刷新页面就能够看到效果.在使用webpack- ...

  6. Qt实现对json文件的解析

    json是一种轻量级的数据结构,其内部的结构是一种键值对(key-value)的组合,最外层是{ }.key是带双引号的字符串常亮,用于获取和存储:value的值可以是bool变量,字符串常量,对象或 ...

  7. python对excel表统计视频教程_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  8. 用python编excel统计表_Python实现对excel文件列表值进行统计的方法

    本文实例讲述了Python实现对excel文件列表值进行统计的方法.分享给大家供大家参考.具体如下: #!/usr/bin/env python #coding=gbk #此PY用来统计一个execl ...

  9. Java实现对PDF文件添加水印

    Java实现对PDF文件添加水印 目录 Java实现对PDF文件添加水印 导入依赖 工具方法 效果 最近项目中遇到对PDF添加水印,实现有多种,采取的是itextpdf 导入依赖 <!-- 对P ...

最新文章

  1. 深入解析Java OutOfMemoryError
  2. jquery实现表格拖拽排序
  3. 趣学python3(28)-pygame-蛇身随机运动(可gameover )
  4. FileOutputStreamTest
  5. 从C/C++零基础到月入9K我用了9个月
  6. mybatis-plus实现自动填充数据如:数据库中createTime和updateTime
  7. EmEditor18.1.2 注册码
  8. div垂直,水平居中
  9. 统计字符个数的c语言程序设计,编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。...
  10. 安卓编译php,编译PHP
  11. 20个最漂亮的基于WordPress的企业网站
  12. python科学计算-python科学计算
  13. 计算机磁盘在线分区,电脑硬盘分区知多少 怎么分区才合理?
  14. C语言中整型变量四舍五入,怎样将整型变量按四舍五入转换成整数
  15. 奇异值分解的几何原理
  16. c++ C2001 常量中有换行符
  17. 安卓开发仿有道词典和谷歌翻译词典软件在线输入翻译源码下载
  18. wordpress中如何禁止或者屏蔽更新提示
  19. 【代码审计】PHP文件包含漏洞利用总结
  20. Cesium中dem或tif转terrain用于地形发布 CesiumLab系列教程

热门文章

  1. Programming Contest Ranking(题解)
  2. 新神魔大陆服务器现在在维护吗,新神魔大陆1月22日合服维护公告
  3. win10系统下安装Linux系统
  4. 数据库、mysql和sql的入门简明教程
  5. Space X 火箭载人上天,马斯克改写时代:理科生的浪漫是用钱征服宇宙
  6. win10英雄联盟登陆服务器未响应怎么办,Win10系统中登陆LOL失败怎么办
  7. Dashboard设计
  8. Vue快速入门(狂神版)
  9. 【this,super关键字使用】经典习题
  10. Gattaca-千钧一发