﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-woaidongmao-随笔分类-库 &amp; 代码段</title><link>http://www.cppblog.com/woaidongmao/category/7448.html</link><description>文章均收录自他人博客，但不喜标题前加-[转贴]，因其丑陋，见谅！~</description><language>zh-cn</language><lastBuildDate>Tue, 08 Sep 2009 17:47:11 GMT</lastBuildDate><pubDate>Tue, 08 Sep 2009 17:47:11 GMT</pubDate><ttl>60</ttl><item><title>支持gzip的爬虫 gzip zlib deflate 相关介绍</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95496.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:58:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95496.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95496.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95496.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95496.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">最近给</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">Httpdownload </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">封装了支持</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">传输</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">&nbsp;<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">从</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">HTTP</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">的角度</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">1 </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">客户端</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">在</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">http Request&nbsp; Header</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">上带上</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> Accept-Encoding:gzip,deflate<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">2</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">服务器若是支持</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">压缩则在</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">http reponse eader<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">部分返回</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">Content-Encoding: gzip </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">或者</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">Content-Type: application/x-gzip<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">3</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">将</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">body</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">部分用</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">解压缩</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">则得到网页内容</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">传说中</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">ie</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">有</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">bug </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">在处理</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">js css</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">压缩的时候有</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">bug,</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">我不理解</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">挺简单的怎么会有</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">bug</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">呢</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">从</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">的角度</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">是一种数据格式</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">默认且目前仅使用</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">deflate</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">算法压缩</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">data</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">部分</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">zlib</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">也是一种数据格式</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">使用</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">defalte</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">算法压缩数据部分</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">deflate</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">是一种压缩算法</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">是</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">huffman</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">编码的一种加强</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">zlib</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">是一个开源库</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">, </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">提供</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">deflate</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">压缩和对应的</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">infalte</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">解压缩</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">不过</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">zlib</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">默认的</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">deflate infalte</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">默认是处理</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">zlib</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">格式数据</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">.</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">必须使用</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">deflateInit2(&amp;strm, DEFAULT_COMPRESSION,Z_DEFLATED, DEFAULT_WINDOWSIZE,DEFAULT_MEMLEVEL, Z_DEFAULT_STRATEGY);<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">初始化才是处理</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">raw deflate data.(</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">这一点在</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">zlib manul</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">没有提</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">在</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">faq</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">中提到</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">困扰了我好久</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">,</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">还是同事</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">L</span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">帮我调试发现</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">)<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">至于</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">格式解析</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">对着</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">RFC</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">写就可以了</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">参见</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">RFC 1950 </span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">关于</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">zlib http://www.faqs.org/rfcs/rfc1950.html<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RFC 1951 </span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">关于</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">deflate http://www.faqs.org/rfcs/rfc1951.html<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RFC 1952 </span><span style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">关于</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip http://www.faqs.org/rfcs/rfc1952.html&nbsp; <o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><br>nt&nbsp; CGzip::Ungzip(const std::string &amp; inStr , std::string &amp;outStr){<br>&nbsp;&nbsp;&nbsp; static int nFileCount=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nFileCount++;<br>&nbsp;&nbsp;&nbsp; string strZipFileName="test";<br>//&nbsp;&nbsp;&nbsp; CConvert::StrToFile(inStr,strZipFileName+CConvert::toString&lt;int&gt;(nFileCount)+"H.gzip"<a href="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image001_2.gif"><img title=clip_image001 style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=22 alt=clip_image001 src="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image001_thumb.gif" width=22 border=0 v:shapes="_x0000_i1025"></a>;<br>&nbsp;&nbsp;&nbsp; if(inStr.length()&lt;11){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; //process gzip header<br>&nbsp;&nbsp;&nbsp; unsigned int skipCt = 10;<br>&nbsp;&nbsp;&nbsp; unsigned int skipZeroCt = 0;<br>&nbsp;&nbsp;&nbsp; unsigned char ID1 = inStr[0];<br>&nbsp;&nbsp;&nbsp; unsigned char ID2 = inStr[1];<br>&nbsp;&nbsp;&nbsp; unsigned char XFL=inStr[8];<br>&nbsp;&nbsp;&nbsp; bool bFEXTRA = false ;<br>&nbsp;&nbsp;&nbsp; bool bFNAME = false ;<br>&nbsp;&nbsp;&nbsp; bool bFCOMMENT = false ;<br>&nbsp;&nbsp;&nbsp; bool bFHCRC = false ;<br>&nbsp;&nbsp;&nbsp; unsigned int XLEN = 0;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if( (ID1!=31) &amp;&amp; (ID2!=139)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;&nbsp; //</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">非</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">gzip</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">头部</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; unsigned char CM = inStr[2];<br>&nbsp;&nbsp;&nbsp; if(CM!=<a href="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image002_2.gif"><img title=clip_image002 style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=22 alt=clip_image002 src="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image002_thumb.gif" width=22 border=0 v:shapes="_x0000_i1026"></a>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1; //</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">现在都只处理</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"> deflate</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">压缩的</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; unsigned char FLG = inStr[3];<br>&nbsp;&nbsp;&nbsp; if( (FLG &amp; GZIP_HEAD_FEXTRA) != 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bFEXTRA = true ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skipCt += 2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XLEN = inStr[10]+ inStr[11]*256 ;//</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-font-kerning: 0pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'">按照小端字节序列处理</span><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skipCt += XLEN;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if( (FLG &amp; GZIP_HEAD_FNAME) != 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bFNAME = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skipZeroCt++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if( (FLG &amp; GZIP_HEAD_FCOMMENT) != 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bFCOMMENT = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skipZeroCt++;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; size_t passedZeroCt = 0;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; size_t iStep = skipCt ;<br>&nbsp;&nbsp;&nbsp; for( size_t iStep =&nbsp; skipCt ; iStep&lt;inStr.length(); iStep++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(passedZeroCt&gt;=skipZeroCt){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(inStr[iStep]==''<a href="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image001_4.gif"><img title=clip_image001 style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=22 alt=clip_image001 src="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image001_thumb_1.gif" width=22 border=0 v:shapes="_x0000_i1027"></a>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; passedZeroCt++;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; skipCt = iStep ;<br>&nbsp;&nbsp;&nbsp; if( (FLG &amp; GZIP_HEAD_FHCRC) != 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bFHCRC = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skipCt+=2 ;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string coreStr = inStr.substr(skipCt,inStr.length()-8-skipCt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CGzip::Inflate(coreStr,outStr);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>}<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: white; LINE-HEIGHT: 18pt; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">&nbsp;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-font-kerning: 0pt">int&nbsp; CGzip:<a href="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image003_2.gif"><img title=clip_image003 style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=18 alt=clip_image003 src="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image003_thumb.gif" width=18 border=0 v:shapes="_x0000_i1028"></a>ogzip(const std::string &amp; inStr , std::string &amp;outStr){<br>&nbsp;&nbsp;&nbsp; char pAddHead[10];<br>&nbsp;&nbsp;&nbsp; unsigned long crc = 0;<br>&nbsp;&nbsp;&nbsp; // gzip header<br>&nbsp;&nbsp;&nbsp; static const char deflate_magic[2] = {'37', '\213'};<br>&nbsp;&nbsp;&nbsp; snprintf(pAddHead, 10,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "%c%c%c%c%c%c%c%c%c%c", deflate_magic[0],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deflate_magic[1], Z_DEFLATED, 0 /* flags */,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, 0, 0, 0 /* 4 chars for mtime */,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 /* xflags */, 0xff);<br>&nbsp;&nbsp;&nbsp; string addHead(pAddHead,10);<br>&nbsp;&nbsp;&nbsp; //gzip's raw deflate body<br>&nbsp;&nbsp;&nbsp; if(CGzip:<a href="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image003_4.gif"><img title=clip_image003 style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=18 alt=clip_image003 src="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/gzipgzipzlibdeflate_134D0/clip_image003_thumb_1.gif" width=18 border=0 v:shapes="_x0000_i1029"></a>eflate(inStr,outStr)&lt;0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return - 1;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; //gzip trailer<br>&nbsp;&nbsp;&nbsp; crc = crc32(crc, (const Bytef*)inStr.data(), inStr.length());<br>&nbsp;&nbsp;&nbsp; char&nbsp; tailBuf[8];<br>&nbsp;&nbsp;&nbsp; memcpy(tailBuf, &amp;crc, 4);<br>&nbsp;&nbsp;&nbsp; int isize=inStr.size();<br>&nbsp;&nbsp;&nbsp; memcpy(tailBuf,&amp;isize,4);<br>&nbsp;&nbsp;&nbsp; string tailStr(tailBuf , 8 );<br>&nbsp;&nbsp;&nbsp; outStr = addHead + outStr+tailStr;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp; return outStr.length(); //</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/woaidongmao/aggbug/95496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:58 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zlib用法简单说明</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95495.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:54:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95495.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95495.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95495.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. 如何获得zlib zlib的主页是:http://www.zlib.net/ 2. 用VC++6.0打开 把 下载的源代码解压打开,VC6.0的工程已经建好了,在\projects\visualc6. 双击zlib.dsw, 可以在VC++6.0中看到里面有3个工程: zlib 是库文件(编译设置选中 win32 lib debug / release), 工程example 是如何使用 z...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/09/07/95495.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/95495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:54 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用 VC 编译 Pcre</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95493.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:47:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95493.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95493.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95493.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95493.html</trackback:ping><description><![CDATA[<p>文/ Fenying <p>　　以前用Greta，但怎么都觉得不爽，特别是用惯了PHP的我，用着POSIX的正则表达式很不习惯。 <p>　　于是今天琢磨了下Pcre，这个号称最强大的正则表达式库…… <p>　　不过，比起Greta最郁闷的就是编译Pcre了…… <p>　　在网上找了一段实在不怎么有用，居然要用到mv.exe，Windows XP下上哪找去？ <p>　　能用rename为什么要用mv.exe？ <p>　　把那段编译脚本“强改”以后，就成了下面的样子了…… <p>　　当然你还是得有sed.exe <p>　　如果没有请点此下载 <a href="http://cid-c12002e5d442fe85.skydrive.live.com/self.aspx/%e7%a8%8b%e5%ba%8f/Sed%204.0.7.rar">sed.exe</a> <p>　　然后把sed.exe放到pcre源码目录下，把下面的文字保存为make.bat，用cmd进入pcre目录，运行make即可。 <p>@echo off <br>echo 正在预处理... <br>echo ------------------------------------------ <br>copy /y config.h.generic bak.h.generic<br>sed -e "s/#define HAVE_BCOPY 1/#define HAVE_BCOPY 0/g" config.h.generic &gt; config.h <br>copy /y pcre.h.generic pcre.h<br>copy /y pcre_chartables.c.dist pcre_chartables.c<br>echo ------------------------------------------<br>echo 正在编译 dftables.exe ...<br>echo ------------------------------------------<br>cl -MD -DHAVE_CONFIG_H dftables.c<br>dftables.exe pcre_chartables.c<br>echo ------------------------------------------<br>echo 正在编译源代码为Obj文件...<br>echo ------------------------------------------<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_chartables.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_compile.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_config.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_dfa_exec.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_exec.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_fullinfo.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_get.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_globals.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_info.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_maketables.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_newline.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_ord2utf8.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_refcount.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_study.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_tables.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_try_flipped.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_ucp_searchfuncs.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_valid_utf8.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_version.c<br>cl -O1 -MD -DHAVE_CONFIG_H -c pcre_xclass.c<br>echo ------------------------------------------<br>echo 正在生成Lib文件...<br>echo ------------------------------------------<br>lib -out:pcre.lib pcre_chartables.obj pcre_compile.obj pcre_config.obj pcre_dfa_exec.obj pcre_exec.obj pcre_fullinfo.obj pcre_get.obj pcre_globals.obj pcre_info.obj pcre_maketables.obj pcre_newline.obj pcre_ord2utf8.obj pcre_refcount.obj pcre_study.obj pcre_tables.obj pcre_try_flipped.obj pcre_ucp_searchfuncs.obj pcre_valid_utf8.obj pcre_version.obj pcre_xclass.obj<br>echo ------------------------------------------<br>echo 正在还原...<br>echo ------------------------------------------<br>copy /y bak.h.generic config.h.generic<br>echo ------------------------------------------<br>echo 正在清理...<br>del *.obj<br>del dftables.exe<br>del bak.h.generic<br>del config.h<br>del dftables.lib<br>del dftables.exp<br>del pcre_chartables.c<br>echo ------------------------------------------<br>echo 完成<br>echo 最终生成列表：<br>echo -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcre.lib<br>echo -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcre.h<br>echo ------------------------------------------<br>pause<br>@echo on <p>　　最后生成pcre.lib和pcre.h两个文件。</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/95493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:47 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC++中使用Zlib的一个例子</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95490.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:46:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95490.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95490.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95490.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95490.html</trackback:ping><description><![CDATA[<p>首先到<a href="http://www.zlib.net/">www.zlib.net</a>下载个ZLIB,解压缩后打开zlib-1.2.3\projects\visualc6\zlib.dsw <p>选择Win32 LIB Release 按F7编绎生成zlib.lib <p>工程中使用时把 <p>D:\zlib-1.2.3\projects\visualc6\Win32_LIB_Release\zlib.lib <p>D:\zlib-1.2.3\zlib.h <p>D:\zlib-1.2.3\zconf.h <p>拷贝到所在工程目录下 <p>然后 <p>#include "zlib.h"<br>#pragma comment(lib,"zlib.lib") <p>void CZlibTestDlg::OnButton1() <br>{<br>const unsigned char strSrc[]="hello world!\n\<br>aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试\<br>aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试\<br>aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试\<br>aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试"; <p>&nbsp;&nbsp;&nbsp;&nbsp; unsigned char buff[1024]={0},strDst[1024]={0};<br>&nbsp;&nbsp;&nbsp;&nbsp; unsigned long srcLen=sizeof(strSrc),bufLen=sizeof(buff),dstLen=sizeof(strDst);<br>CString strc,strc2,strc3;<br>&nbsp;&nbsp;&nbsp;&nbsp; strc.Format("Src string:%s\nLength:%d\n===================\n",strSrc,srcLen);<br>&nbsp;&nbsp;&nbsp;&nbsp; //压缩<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compress(buff,&amp;bufLen,strSrc,srcLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strc2.Format("\nAfter Compressed Length:%d\nCompressed String:%s\n==============\n",bufLen,buff);<br>&nbsp;&nbsp;&nbsp;&nbsp; //解压缩<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uncompress(strDst,&amp;dstLen,buff,bufLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strc3.Format("\nAfter UnCompressed Length:%d\nUnCompressed String:%s\n",dstLen,strDst);<br>&nbsp;&nbsp; AfxMessageBox(strc+strc2+strc3); <br>}</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/95490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:46 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么使用PCRE库？</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95492.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:46:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95492.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95492.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95492.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95492.html</trackback:ping><description><![CDATA[<p>一直找PCRE的学习资料，网上没有发现很全面的，回过头了仔细看了一下PCRE源码dochtml下的资料，发现其实这些文档就是非常不错的学习材料。 <p>今天看了一下如何使用PCRE，还没有涉及到PCRE原理和实现的代码。我们可以在<a href="http://www.pcre.org/">http://www.pcre.org/</a>上下载到pcre的代码，下载到的源文件pcre-x.x.tar.bz2在linux下面很容易就可以被编译和安装(x86 系列cpu哦)。 <p>./configure <p>make <p>make install <p>PCRE编译安装之后，以一个lib库的方式提供给用户程序进行使用，PCRE lib 提供了一组API,通过这一组API可以实现类似于Perl语法的正则表达式查找和匹配的功能。（PCREE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl, with just a few differences.） <p> 要想使用好PCRE，要了解很多正则表达式的内容、同时需要对PCRE进行很多的配置，从而使其支持不同的模式和规格。在这里只是简单的描述一下使用PCRE的方法，不涉及配置和正则表达式语法的内容。 <p>使用PCRE主要是使用下面的四个函数，对这四个函数有了了解，使用PCRE库的时候就会简单很多。 <p><b>pcre_compile() /</b><b>pcre_compile2()</b> <p><b>pcre_study()</b> <p><b>pcre_exec()</b> <p>1. <strong>pcre_compile() /pcre_compile2()， </strong>正则表达式在使用之前要经过编译。 <p><b>pcre *pcre_compile(const char *<i>pattern</i>, int <i>options</i>,</b> <b>const char **<i>errptr</i>, int *<i>erroffset</i>,</b> <b>const unsigned char *<i>tableptr</i>);</b> <p><b>pcre *pcre_compile2(const char *<i>pattern</i>, int <i>options</i>,</b> <b>int *<i>errorcodeptr</i>,</b> <b>const char **<i>errptr</i>, int *<i>erroffset</i>,</b> <b>const unsigned char *<i>tableptr</i>);</b> <p>编译的目的是将正则表达式的pattern转换成PCRE引擎能够识别的结构（struct real_pcre）。 <p>还没有对编译的过程进行分析. <p>2. <strong>pcre_study（），</strong>对编译后的正则表达式结构(struct real_pcre)进行分析和学习,学习的结果是一个数据结构(struct pcre_extra),这个数据结构连同编译后的规则(struct real_pcre)可以一起送给<strong>pcre_exec</strong>单元进行匹配. <p>If a compiled pattern is going to be used several times, it is worth spending more time analyzing it in order to speed up the time taken for matching. The function <b>pcre_study()</b> takes a pointer to a compiled pattern as its first argument. If studying the pattern produces additional information that will help speed up matching, <b>pcre_study()</b> returns a pointer to a <b>pcre_extra</b> block, in which the <i>study_data</i> field points to the results of the study.  <p><strong>pcre_study（）</strong>的引入主要是为了加速正则表达式匹配的速度.(为什么学习后就能加速呢?)这个还是比较有用的,可以将正则表达式编译,学习后保存到一个文件或内存中,这样进行匹配的时候效率比较搞.snort中就是这样做的. <p>3. <strong>pcre_exec（），</strong>根据正则表达式到指定的字符串中进行查找和匹配,并输出匹配的结果. <p>The function pcre_exec() is called to match a subject string against a compiled pattern, which is passed in the <i>code</i> argument. If the pattern has been studied, the result of the study should be passed in the <i>extra</i> argument. This function is the main matching facility of the library, and it operates in a Perl-like manner.  <p>4. Snort中如何使用PCRE呢?snort中以插件的形式调用PCRE进行正则表达式的匹配。 <p>1）进行正则表达式的初始化。 <p>InitializeDetection--&gt; RegisterRules--&gt;RegisterOneRule--&gt;PCRESetup(Just for OPTION_TYPE_PCRE)-&gt;pcre_compile and pcre_study. All will be stored in a structure called PCREInfo in the memory. <p>2.) 规则的匹配。DetectionCheckRule--&gt;ruleMatch--&gt;ruleMatchInternal--&gt;pcreMatch(OPTION_TYPE_PCRE)-&gt;pcre_test--&gt;pcre_exec.  <p>5.编译PCRE on TILERA platform. <p>1) tar -xjvf pcre-7.9.tar.bz2 <p>2) Modify config.sub to support tile architecture.  <p>We wish to use DE&gt;HOST=tileDE&gt;, but the DE&gt;tileDE&gt; architecture is not yet standard, so may not exist in the DE&gt;config.subDE&gt; file. If necessary, add these lines in the alphabetical list of architectures (typically about 1,100 lines down): <pre> tile*)
  basic_machine=tile-tilera
  os=-linux-gnu
  ;;</pre><pre>3) Compile PCRE on tile Linux. </pre><pre>** Start up TILERA card through tile-monitor.</pre><pre>tile-monitor --pci --mount-tile /usr&nbsp; \<br>&nbsp; --mount-tile /bin --mount-tile /sbin --mount-tile /etc --mount-tile /lib \<br>&nbsp; --mkdir /mnt/libs --mount /libs-compile /mnt/libs \<br>&nbsp; --mkdir /mnt/mde&nbsp; --mount $TILERA_ROOT /mnt/mde</pre><pre>* ./configure --build=tile&nbsp; --prefix=/usr&nbsp; lt_cv_sys_max_cmd_len=262144 --disable-cpp</pre><pre>//编译的时候没有使能c++的支持。</pre><pre>pcre-7.9 configuration summary:</pre><pre>&nbsp;&nbsp; pcre-7.9 configuration summary:</pre><pre>&nbsp;&nbsp;&nbsp; Install prefix .................. : /usr<br>&nbsp;&nbsp;&nbsp; C preprocessor .................. : gcc -E<br>&nbsp;&nbsp;&nbsp; C compiler ...................... : gcc<br>&nbsp;&nbsp;&nbsp; C++ preprocessor ................ : g++ -E<br>&nbsp;&nbsp;&nbsp; C++ compiler .................... : g++<br>&nbsp;&nbsp;&nbsp; Linker .......................... : /usr/bin/ld<br>&nbsp;&nbsp;&nbsp; C preprocessor flags ............ :<br>&nbsp;&nbsp;&nbsp; C compiler flags ................ : -O2<br>&nbsp;&nbsp;&nbsp; C++ compiler flags .............. : -O2<br>&nbsp;&nbsp;&nbsp; Linker flags .................... :<br>&nbsp;&nbsp;&nbsp; Extra libraries ................. :</pre><pre>&nbsp;&nbsp;&nbsp; Build C++ library ............... : no<br>&nbsp;&nbsp;&nbsp; Enable UTF-8 support ............ : no<br>&nbsp;&nbsp;&nbsp; Unicode properties .............. : no<br>&nbsp;&nbsp;&nbsp; Newline char/sequence ........... : lf<br>&nbsp;&nbsp;&nbsp; \R matches only ANYCRLF ......... : no<br>&nbsp;&nbsp;&nbsp; EBCDIC coding ................... : no<br>&nbsp;&nbsp;&nbsp; Rebuild char tables ............. : no<br>&nbsp;&nbsp;&nbsp; Use stack recursion ............. : yes<br>&nbsp;&nbsp;&nbsp; POSIX mem threshold ............. : 10<br>&nbsp;&nbsp;&nbsp; Internal link size .............. : 2<br>&nbsp;&nbsp;&nbsp; Match limit ..................... : 10000000<br>&nbsp;&nbsp;&nbsp; Match limit recursion ........... : MATCH_LIMIT<br>&nbsp;&nbsp;&nbsp; Build shared libs ............... : yes<br>&nbsp;&nbsp;&nbsp; Build static libs ............... : yes<br>&nbsp;&nbsp;&nbsp; Link pcregrep with libz ......... : no<br>&nbsp;&nbsp;&nbsp; Link pcregrep with libbz2 ....... : no<br>&nbsp;&nbsp;&nbsp; Link pcretest with libreadline .. : no<br></pre><pre>* make</pre><pre>* make install<br><br>4) Compile the PCRE demo code and test PCRE lib on TILERA linux. PCRE 的源文件中提供了两个demo程序，一个是比较简单的pcredemo.c，很容易理解；另外一个是pcretest.c，这个比较全面、完整的介绍了pcre库的使用。这两个demo本身就是非常好的学习材料。</pre><pre># gcc -o pcredemo pcredemo.c -lpcre<br>#&nbsp; ./pcredemo 'cat|dog' 'the cat sat on the mat'</pre><pre>Match succeeded at offset 4<br> 0: cat<br>No named substrings<br># ./pcredemo -g 'cat|dog' 'the dog sat on the cat'</pre><pre>Match succeeded at offset 4<br> 0: dog<br>No named substrings</pre><pre>Match succeeded again at offset 19<br> 0: cat<br>No named substrings<br></pre><pre>//参考资料:</pre><pre>PCRE源码文档:pcre-7.9/doc/html</pre><img src ="http://www.cppblog.com/woaidongmao/aggbug/95492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:46 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc下zlib编译出现问题</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95489.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:45:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95489.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95489.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95489.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95489.html</trackback:ping><description><![CDATA[<p>原文链接：<a href="http://www.itzhe.cn/news/20080717/178365.html">http://www.itzhe.cn/news/20080717/178365.html</a><br>我刚刚下了一个zlib的源代码，下载地址：<a href="http://www.zlib.net/zlib123.zip">http://www.zlib.net/zlib123.zip</a>，用vc打开其中的projects\visualc6下的zlib.dsw工程文件后，进行编译，就报出了以下的错误： <br>--------------------Configuration: zlib - Win32 LIB ASM Debug-------------------- <br>Assembling... <br>'ml.exe' 不是内部或外部命令，也不是可运行的程序 <br>或批处理文件。 <br>Error executing c:\windows\system32\cmd.exe. <br>zlibd.lib - 1 error(s), 0 warning(s) <br>我找了一下也没发现有“ml.exe”这样的文件啊,不晓得是哪个地方出的问题啊！源代码是绝对没有动过的。希望有对zlib有研究的帮帮忙啊！先谢过啦！<br>网友回复:ml.exe 是微软汇编编译器, MASM6 或者以后版本,并在PATH 中设置执行路径即可. DDK 也是可以的<br>网友回复:make line???<br>网友回复:我已经将MASM6.11安装了也设置了环境变量，在命令行方式下也能正常的运行ml.exe了，但是为什么在vc下还是会报那个错误啊？？？？？？？我真的快要崩溃啦！希望能告诉我下到底我哪漏掉了啊！<br>网友回复:那你强制指定路径试一下。或者把ml相关的几个文件放到vc6的bin目录下。<br>网友回复:引用 4 楼 unsigned 的回复:<br>那你强制指定路径试一下。或者把ml相关的几个文件放到vc6的bin目录下。 <br>OK!按照你的方式更改后已经不会报ml.exe的错误了！不过现在又出了新的问题！！！！ <br>当用ml来编译inffas32.asm文件时，会报39个错误！！！！在命令行方式下单独编译也会报这39个错误！！！ <br>具体的错误信息如下： <br>--------------------Configuration: zlib - Win32 LIB ASM Debug-------------------- <br>Assembling... <br>Assembling: ..\..\contrib\masmx86\inffas32.asm <br>..\..\contrib\masmx86\inffas32.asm(65): error A2008: syntax error : . <br>..\..\contrib\masmx86\inffas32.asm(638): error A2008: syntax error : emms <br>..\..\contrib\masmx86\inffas32.asm(644): error A2008: syntax error : mm0 <br>..\..\contrib\masmx86\inffas32.asm(647): error A2008: syntax error : mm4 <br>..\..\contrib\masmx86\inffas32.asm(648): error A2008: syntax error : movq <br>..\..\contrib\masmx86\inffas32.asm(649): error A2008: syntax error : mm5 <br>..\..\contrib\masmx86\inffas32.asm(650): error A2008: syntax error : movq <br>..\..\contrib\masmx86\inffas32.asm(651): error A2008: syntax error : pxor <br>..\..\contrib\masmx86\inffas32.asm(657): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(662): error A2008: syntax error : mm6 <br>..\..\contrib\masmx86\inffas32.asm(663): error A2008: syntax error : mm7 <br>..\..\contrib\masmx86\inffas32.asm(665): error A2008: syntax error : psllq <br>..\..\contrib\masmx86\inffas32.asm(667): error A2008: syntax error : por <br>..\..\contrib\masmx86\inffas32.asm(670): error A2008: syntax error : pand <br>..\..\contrib\masmx86\inffas32.asm(671): error A2008: syntax error : eax <br>..\..\contrib\masmx86\inffas32.asm(672): error A2008: syntax error : movq <br>..\..\contrib\masmx86\inffas32.asm(677): error A2008: syntax error : mm1 <br>..\..\contrib\masmx86\inffas32.asm(706): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(707): error A2008: syntax error : mm1 <br>..\..\contrib\masmx86\inffas32.asm(708): error A2008: syntax error : ecx <br>..\..\contrib\masmx86\inffas32.asm(714): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(719): error A2008: syntax error : mm6 <br>..\..\contrib\masmx86\inffas32.asm(720): error A2008: syntax error : mm7 <br>..\..\contrib\masmx86\inffas32.asm(722): error A2008: syntax error : psllq <br>..\..\contrib\masmx86\inffas32.asm(724): error A2008: syntax error : por <br>..\..\contrib\masmx86\inffas32.asm(728): error A2008: syntax error : pand <br>..\..\contrib\masmx86\inffas32.asm(729): error A2008: syntax error : eax <br>..\..\contrib\masmx86\inffas32.asm(730): error A2008: syntax error : movq <br>..\..\contrib\masmx86\inffas32.asm(739): error A2008: syntax error : mm1 <br>..\..\contrib\masmx86\inffas32.asm(747): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(748): error A2008: syntax error : mm1 <br>..\..\contrib\masmx86\inffas32.asm(749): error A2008: syntax error : ecx <br>..\..\contrib\masmx86\inffas32.asm(808): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(809): error A2008: syntax error : ecx <br>..\..\contrib\masmx86\inffas32.asm(821): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(822): error A2008: syntax error : ecx <br>..\..\contrib\masmx86\inffas32.asm(1021): error A2008: syntax error : psrlq <br>..\..\contrib\masmx86\inffas32.asm(1022): error A2008: syntax error : ebp <br>..\..\contrib\masmx86\inffas32.asm(1024): error A2008: syntax error : emms <br>Error executing c:\windows\system32\cmd.exe. <br>example.exe - 39 error(s), 0 warning(s) <br>希望曾经编译过zlib的达人给予帮助！ <br>是不是我的MASM6 版本太高了，所以对汇编的代码不支持啊？？？？真的崩溃了啊！！！！！！<br>网友回复:是你的ml版本太低。这上面出错的都是一些新指令。<br>网友回复:引用 6 楼 unsigned 的回复:<br>是你的ml版本太低。这上面出错的都是一些新指令。 <br>现在问题解决啦！原来是在编译库的时候应该选win32 lib debug而不是它默认的win32 lib asm debug，虽然有汇编的代码，但是似乎这样选了以后就不会编译汇编代码了哦！呵呵！感谢这么多位的帮助哈！问题解决！Done！</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/95489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:45 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zlib与GZip</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95486.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95486.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95486.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95486.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95486.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">zlib</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">是一个通用的压缩开源库，提供了在内存中压缩和解压的函数，包括对解压后数据的校验。目前版本的<span lang="EN-US">zlib</span>只支持<span lang="EN-US">deflate</span>方法，但是其它的方法将会被添加进来并且拥有同样的接口。<span lang="EN-US"><?xml:namespace prefix = o /><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%; text-align: right; mso-pagination: widow-orphan" align="right"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">—— zlib manaul<o:p></o:p></span></p> <p class="MsoNormal" style="margin-bottom: 12pt; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; deflate</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">算法在<span lang="EN-US">rfc1951</span>中有详细的说明。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; zlib</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">同时又是一种数据格式，使用<span lang="EN-US">zlib</span>库压缩后的数据会在<span lang="EN-US">deflate</span>数据的头和尾添加信息，形成<span lang="EN-US">zlib</span>格式的数据。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal" style="line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp; gzip</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">也是一种数据压缩格式，可以大体分为头部，数据部和尾部三个部分，其中头部和尾部主要是一些文档属性和校验信息（<span lang="EN-US">rfc1952</span>），数据部主要是用<span lang="EN-US">deflate</span>方法压缩得到的数据。<span lang="EN-US"><br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; zlib</span>库默认的压缩方法并不是<span lang="EN-US">gzip</span>的，而是<span lang="EN-US">zlib</span>的，因此使用<span lang="EN-US">zlib</span>压缩得到<span lang="EN-US">gzip</span>格式的数据有两种方法：<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="margin-left: 47.25pt; text-indent: -18pt; line-height: 150%; text-align: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><span style="mso-list: ignore">1.<span style="font: 7pt 'Times New Roman'"> </span></span></span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">使用<span lang="EN-US">zlib</span>提供的<span lang="EN-US">gz***</span>系列函数可以直接把想要的内容写入一个磁盘<span lang="EN-US">gzip</span>文件； <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="margin-left: 47.25pt; text-indent: -18pt; line-height: 150%; text-align: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><span style="mso-list: ignore">2.<span style="font: 7pt 'Times New Roman'"> </span></span></span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">如果想在内存中生成<span lang="EN-US">gzip</span>格式的数据，可以在初始化的时候调用<span lang="EN-US">inflateInit2</span>函数，并指定为<span lang="EN-US">gzip</span>格式，代码如下：<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; <o:p></o:p></span></p> <table class="MsoNormalTable" style="border-right: medium none; border-top: medium none; background: #f1f1f1; border-left: medium none; width: 95%; border-bottom: medium none; border-collapse: collapse; mso-border-alt: outset #999999 .75pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing="0" cellpadding="0" width="95%" border="1"> <tbody> <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"> <td style="border-right: #999999 1pt inset; padding-right: 0cm; border-top: #999999 1pt inset; padding-left: 0cm; padding-bottom: 0cm; border-left: #999999 1pt inset; padding-top: 0cm; border-bottom: #999999 1pt inset; mso-border-alt: inset #999999 .75pt"> <p class="MsoNormal" style="margin: 3.75pt; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp; z_stream d_stream</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br>&nbsp; d_stream</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">zalloc </span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> NULL</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>&nbsp; d_stream</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">zfree </span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> NULL</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>&nbsp; d_stream</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">opaque </span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> NULL</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>&nbsp; </span><span lang="EN-US" style="font-size: 12pt; color: blue; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">int</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span lang="EN-US" style="font-size: 12pt; color: blue; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">ret</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">=</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> deflateInit2</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">(&amp;</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">d_stream</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> Z_DEFAULT_COMPRESSION</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> Z_DEFLATED</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> DEFAULT_WINDOWSIZE</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> DEFAULT_MEMLEVEL</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">,</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp; Z_DEFAULT_STRATEGY</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br><br>&nbsp; </span><span lang="EN-US" style="font-size: 12pt; color: blue; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">if</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">(</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Z_OK </span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">!=</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span lang="EN-US" style="font-size: 12pt; color: blue; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">ret</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; printf</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">(</span><span lang="EN-US" style="font-size: 12pt; color: fuchsia; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">"init deflate error\n"</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">);</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>&nbsp;&nbsp;&nbsp; return </span><span lang="EN-US" style="font-size: 12pt; color: blue; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">ret</span><span lang="EN-US" style="font-size: 12pt; color: #0000cc; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">;</span><span lang="EN-US" style="font-size: 12pt; color: black; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>&nbsp; }</span><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p></o:p></span></p></td></tr></tbody></table> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">之后，用<span lang="EN-US">deflate</span>压缩出来的数据就是<span lang="EN-US">gzip</span>的了。</span><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial"><o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: arial; mso-bidi-font-size: 10.0pt"><o:p>&nbsp;</o:p></span></p><img src ="http://www.cppblog.com/woaidongmao/aggbug/95486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:27 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zlib与GZip</title><link>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95485.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 07 Sep 2009 13:25:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95485.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/95485.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/09/07/95485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/95485.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/95485.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">zlib<?xml:namespace prefix = o /><o:p></o:p></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">zlib</span>是提供资料压缩之用的函式库，由<span lang="EN-US">Jean-loup Gailly</span>与<span lang="EN-US">Mark Adler</span>所开发，初版<span lang="EN-US">0.9</span>版在<?xml:namespace prefix = st1 /><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="5" year="1995"><span lang="EN-US">1995</span>年<span lang="EN-US">5</span>月<span lang="EN-US">1</span>日</st1:chsdate>发表。<span lang="EN-US">zlib</span>使用<span lang="EN-US">DEFLATE</span>算法，最初是为<span lang="EN-US">libpng</span>函式库所写的，后来普遍为许多软件所使用。此函式库为自由软件，使用<span lang="EN-US">zlib</span>授权。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">zlib</span>是用于资料压缩的函式库，由<span lang="EN-US">Jean-loup Gailly</span>与<span lang="EN-US">Mark Adler</span>所开发，是使用抽象化的<span lang="EN-US">DEFLATE</span>压缩算法<span lang="EN-US">gzip</span>文件压缩程序。初版<span lang="EN-US">0.9</span>版在<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="5" year="1995"><span lang="EN-US">1995</span>年<span lang="EN-US">5</span>月<span lang="EN-US">1</span>日</st1:chsdate>发表，最初是为<span lang="EN-US">libpng</span>函式库所写的，后来普遍为许多软件所使用。此函式库为自由软件，使用<span lang="EN-US">zlib</span>授权。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　截至<span lang="EN-US">2007</span>年<span lang="EN-US">3</span>月，<span lang="EN-US">zlib</span>是包含在<span lang="EN-US">Coverity</span>的美国国土安全部赞助者选择继续审查的开源项目。 <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">[</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">编辑本段<span lang="EN-US">]<o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">功能<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* </span>数据头<span lang="EN-US">(header) - zlib</span>能使用一个<span lang="EN-US">gzip</span>数据头，<span lang="EN-US">zlib</span>数据头或者不使用数据头压缩数据。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　通常情况下，数据压缩使用<span lang="EN-US">zlib</span>数据头，因为这提供错误数据检测。当数据不使用数据头写入时，结果是没有任何错误检测的原始<span lang="EN-US">DEFLATE</span>数据，那么解压缩软件的调用者知道压缩数据在什么地方结束。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">gzip</span>数据头比<span lang="EN-US">zlib</span>数据头要大，因为它保存了文件名和其他文件系统信息，事实上这是广泛使用的<span lang="EN-US">gzip</span>文件的数据头格式。<span style="color: red">注意<span lang="EN-US">zlib</span>函式库本身不能创建一个<span lang="EN-US">gzip</span>文件，但是它相当轻松的通过把压缩数据写入到一个有<span lang="EN-US">gzip</span>文件头的文件中。<span lang="EN-US"><o:p></o:p></span></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* </span>算法<span lang="EN-US"> - </span>目前<span lang="EN-US">zlib</span>仅支持一个<span lang="EN-US">LZ77</span>的变种算法，<span lang="EN-US">DEFLATE</span>的算法。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　这个算法使用很少的系统资源，对各种数据提供很好的压缩效果。这也是在<span lang="EN-US">ZIP</span>档案中无一例外的使用这个算法。（尽管<span lang="EN-US">zip</span>文件格式也支持几种其他的算法）。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　看起来<span lang="EN-US">zlib</span>格式将不会被扩展使用任何其他算法，尽管数据头可以有这种可能性。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* </span>使用资源<span lang="EN-US"> - </span>函式库提供了对处理器和内存使用控制的能力<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　不同的压缩级别数值可以指示不同的压缩执行速度。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　还有内存控制管理的功能。这在一些诸如嵌入式系统这样内存有限制的环境中是有用的。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* </span>策略<span lang="EN-US"> - </span>压缩可以针对特定类型的数据进行优化<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　如果你总是使用<span lang="EN-US">zlib</span>库压缩压缩特定类型的数据，那么可以使用有针对性的策略可以提高压缩效率和性能。例如，如果你的数据包含很长的重复数据，那么可以用<span lang="EN-US">RLE</span>（运行长度编码）策略，可能会有更好的结果。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　对于一般的数据，默认的策略是首选。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* </span>错误处理<span lang="EN-US"> - </span>错误可以被发现和跳过<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　数据混乱可以被检测（只要数据和<span lang="EN-US">zlib</span>或者<span lang="EN-US">gzip</span>数据头一起被写入－参见上面）<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　此外，如果全刷新点（<span lang="EN-US">full-flush points</span>）被写入到压缩后的数据流中，那么错误数据是可以被跳过的，并且解压缩将重新同步到下个全刷新点。（错误数据的无错恢复被提供）。全刷新点技术对于在不可靠的通道上的大数据流是很有用的，一些过去的数据丢失是不重要的（例如多媒体数据），但是建立太多的全刷新点会极大的影响速度和压缩。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* </span>数据长度<span lang="EN-US"> - </span>对于压缩和解压缩，没有数据长度的限制<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　重复调用库函数允许处理无限的数据块。一些辅助代码（计数变量）可能会溢出，但是不影响实际的压缩和解压缩。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　当压缩一个长（无限）数据流时，最好写入全刷新点。 <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">[</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">编辑本段<span lang="EN-US">]<o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">使用<span lang="EN-US">zlib</span>的软件<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span style="color: red">今天，<span lang="EN-US">zlib</span>是一种事实上的业界标准，以至于在标准文档中，<span lang="EN-US">zlib</span>和<span lang="EN-US">DEFLATE</span>常常互换使用。数以千计的应用程序直接或间接依靠<span lang="EN-US">zlib</span>压缩函式库</span>，<span lang="EN-US">[2]</span>，包括：<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* Linux</span>核心：使用<span lang="EN-US">zlib</span>以实作网络协定的压缩、档案系统的压缩以及开机时解压缩自身的核心。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* libpng</span>，用于<span lang="EN-US">PNG</span>图形格式的一个实现，对<span lang="EN-US">bitmap</span>数据规定了<span lang="EN-US">DEFLATE</span>作为流压缩方法。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* Apache</span>：使用<span lang="EN-US">zlib</span>实作<span lang="EN-US">http 1.1</span>。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* OpenSSH</span>、<span lang="EN-US">OpenSSL</span>：以<span lang="EN-US">zlib</span>达到最佳化加密网络传输。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* FFmpeg</span>：以<span lang="EN-US">zlib</span>读写<span lang="EN-US">Matroska</span>等以<span lang="EN-US">DEFLATE</span>算法压缩的多媒体串流格式。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* rsync</span>：以<span lang="EN-US">zlib</span>最佳化远端同步时的传输。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* The dpkg and RPM package managers, which use zlib to unpack files from compressed software packages.<o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* Subversion </span>、<span lang="EN-US">Git</span>和<span lang="EN-US"> CVS </span>版本控制系统，使用<span lang="EN-US">zlib</span>来压缩和远端仓库的通讯流量。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　<span lang="EN-US">* dpkg</span>和<span lang="EN-US">RPM</span>等包管理软件：以<span lang="EN-US">zlib</span>解压缩<span lang="EN-US">RPM</span>或者其他封包。<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体; mso-bidi-font-family: arial">　　因为其代码的可移植性，宽松的许可以及较小的内存占用，<span lang="EN-US">zlib</span>在许多嵌入式设备中也有应用。<span lang="EN-US"><o:p></o:p></span></span></p> <p><font color="#ff0000">zlib和gzip是一回事，gzip不过外面多了一个文件格式，作者都是同一个人。 <br>据说7zip比zlib有更高的压缩比和解压速度,但没有用过。</font></p><img src ="http://www.cppblog.com/woaidongmao/aggbug/95485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-09-07 21:25 <a href="http://www.cppblog.com/woaidongmao/archive/2009/09/07/95485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Intel TBB:Pipeline,软件流水线的威力</title><link>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81670.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 01 May 2009 17:53:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81670.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/81670.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/81670.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/81670.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 参观过工厂装配线的人一定对流水线这个名字不陌生，半成品在皮带机上流过一系列的流水线节点，每个节点以自己的方式进一步装配，然后传给下一节点。现代的高性能CPU均采用了这种流水线设计，将计算任务分为取指，译码，执行，访存，反馈等几个阶段。采用流水线设计的最大优点就是增加了系统吞吐量，例如，当第一条指令处于执行阶段的时候，译码单元可以在翻译第二条指令，而取指单元则可以去加载第三条指令。甚至，在某些节点还...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/05/02/81670.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/81670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-05-02 01:53 <a href="http://www.cppblog.com/woaidongmao/archive/2009/05/02/81670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Intel TBB::Pipeline，按序处理数据</title><link>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81671.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 01 May 2009 17:53:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81671.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/81671.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/81671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/81671.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在上一篇文章(TBB:pipeline,软件流水线的威力)最后提出了几个问题，我们逐个来看看TBB::Pipeline是怎么解决的。 &nbsp; &nbsp; 为什么Pipeline可以保证数据执行的顺序?既然TBB归根到底是通过多线程执行任务，为什么不会在读入先后两个字符串后，后读入的字符串先被下一个task处理?Pipeline里是不是有一个类似于FIFO 先进先出队列之类的东西？ &nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/05/02/81671.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/81671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-05-02 01:53 <a href="http://www.cppblog.com/woaidongmao/archive/2009/05/02/81671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[译]Google C++ Mocking Framework Cheat Sheet</title><link>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 01 May 2009 17:52:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/81669.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/81669.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/81669.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Google C++ Mocking Framework Cheat Sheet中文版 &nbsp; ·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义一个模拟(Mock)类  ·&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/81669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-05-02 01:52 <a href="http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google C++ Mocking Framework使用简介</title><link>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81668.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 01 May 2009 17:50:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81668.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/81668.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/81668.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/81668.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下载Google C++ Mocking Framework，解压...发现它自带了Google Test的全部源代码，也就是说有了这个那个Google Test就不用去下载了注意，Google Mock的编译对编译器的C++支持要求很高，并且需要有tr1的支持。 &nbsp; Linux/Unix下的GCC编译:&nbsp;注意：Google Mock的Readme里说它要求4.0版以上(不过版...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/05/02/81668.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/81668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-05-02 01:50 <a href="http://www.cppblog.com/woaidongmao/archive/2009/05/02/81668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google Test 框架高级使用指南</title><link>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81667.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 01 May 2009 17:45:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81667.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/81667.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/81667.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/81667.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 现在您已经读完 GoogleTestPrimer 并学会了如何用 Google Test 写一些测试程序, 现在是学习更多技巧的时候了。这篇文章将告诉你更多的断言、如何用流传递复杂的错误信息、传达致命失败、重用并加快你的测试夹具以及在你的测试工程中使用各种的标记。 现在您已经读完&nbsp;GoogleTestPrimer&nbsp;并学会了如何用 Google Test 写一些测试程序, 现在是...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/05/02/81667.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/81667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-05-02 01:45 <a href="http://www.cppblog.com/woaidongmao/archive/2009/05/02/81667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Google C++ Testing Framework进行单元测试</title><link>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81666.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 01 May 2009 17:44:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81666.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/81666.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2009/05/02/81666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/81666.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/81666.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前几个月Google开源了它的测试框架，自称其旗下的上千个项目都在使用它。今天我们就用它来尝尝鲜吧？:-) 安装:下载Google C++ Testing Framework，解压...VC2005:&nbsp;&nbsp;&nbsp; 直接打开msvc\gtest.vcproj或msvc\gtest.sln，直接编译即可。Linux/Unix下的GCC:&nbsp;&nbsp;&nbsp; 传统...&nbsp;&nbsp;<a href='http://www.cppblog.com/woaidongmao/archive/2009/05/02/81666.html'>阅读全文</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/81666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2009-05-02 01:44 <a href="http://www.cppblog.com/woaidongmao/archive/2009/05/02/81666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件载入</title><link>http://www.cppblog.com/woaidongmao/archive/2008/06/25/54539.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Wed, 25 Jun 2008 03:16:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/06/25/54539.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/54539.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/06/25/54539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/54539.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/54539.html</trackback:ping><description><![CDATA[<p>BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadFile(const char* file_name, vector&lt;char&gt;&amp; vec_file); </p> <p>&nbsp;</p> <p>BOOL Glob_Fun::LoadFile(const char* file_name, vector&lt;char&gt;&amp; vec_file)<br>{<br>&nbsp;&nbsp;&nbsp; vec_file.clear();<br>&nbsp;&nbsp;&nbsp; if ((NULL == file_name)) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>&nbsp;&nbsp;&nbsp; CFile file;<br>&nbsp;&nbsp;&nbsp; char szBuf[1024 * 10] = "", *pTmp = NULL;<br>&nbsp;&nbsp;&nbsp; int nRead = 0;<br>&nbsp;&nbsp;&nbsp; int file_len = 0;  <p>&nbsp;&nbsp;&nbsp; if(FALSE == file.Open(file_name,CFile::modeRead))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;  <p>&nbsp;&nbsp;&nbsp; if(0 &gt;= (file_len=file.GetLength()))<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.Close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return TRUE;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; vec_file.resize(file_len);<br>&nbsp;&nbsp;&nbsp; pTmp = &amp;vec_file[0];<br>&nbsp;&nbsp;&nbsp; do<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nRead = file.Read(szBuf, sizeof(szBuf));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(pTmp, szBuf, nRead);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pTmp += nRead;<br>&nbsp;&nbsp;&nbsp; }while (nRead &gt; 0);<br>&nbsp;&nbsp;&nbsp; file.Close();<br>&nbsp;&nbsp;&nbsp; return TRUE;<br>} </p><img src ="http://www.cppblog.com/woaidongmao/aggbug/54539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-06-25 11:16 <a href="http://www.cppblog.com/woaidongmao/archive/2008/06/25/54539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存搜索与解析</title><link>http://www.cppblog.com/woaidongmao/archive/2008/06/23/54382.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 23 Jun 2008 07:43:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/06/23/54382.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/54382.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/06/23/54382.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/54382.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/54382.html</trackback:ping><description><![CDATA[<p>char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MemFind(const void* src_buf, int src_len, const void* find_buf, int find_len);<br>BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParserMem(const void* src_buf, int src_len, const vector&lt; vector&lt;char&gt; &gt;&amp; vec_par, vector&lt; vector&lt;char&gt; &gt;&amp; vec_result);//---- 多重二进制分割<br>BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParserMem(const void* src_buf, int src_len, const vector&lt;char&gt;&amp; vec_par, vector&lt; vector&lt;char&gt; &gt;&amp; vec_result);//---- 单层二进制分割<br>BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParserMem(const void* src_buf, int src_len, const char* par_buf, vector&lt; vector&lt;char&gt; &gt;&amp; vec_result);//---- 字符分割<br>BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParserMem(const void* src_buf, int src_len, const char* par_buf, vector&lt;string&gt;&amp; vec_result);//---- 字符分割  <p>&nbsp; <p>char* Glob_Fun::MemFind(const void* src_buf, int src_len, const void* find_buf, int find_len)<br>{<br>&nbsp;&nbsp;&nbsp; if ((NULL == src_buf) || (NULL == find_buf)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || (src_len &lt;= 0) || (find_len &lt;= 0)) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;  <p>&nbsp;&nbsp;&nbsp; char*cp = (char*)src_buf;<br>&nbsp;&nbsp;&nbsp; char*src_end = (char*)src_buf +&nbsp; src_len;<br>&nbsp;&nbsp;&nbsp; char*find_end = (char*)find_buf + find_len;<br>&nbsp;&nbsp;&nbsp; char*s_src = NULL, *s_find = NULL;<br>&nbsp;&nbsp;&nbsp; while (cp &lt; src_end)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_src = cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_find = (char*)find_buf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (s_src &lt; src_end &amp;&amp; s_find &lt; find_end &amp;&amp; *s_src == *s_find)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++s_src, ++s_find;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s_find == find_end)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(cp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++cp;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return(NULL);<br>}  <p>BOOL Glob_Fun::ParserMem(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const void*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_buf, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_len, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const vector&lt; vector&lt;char&gt; &gt;&amp;&nbsp;&nbsp;&nbsp; vec_par, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt; vector&lt;char&gt; &gt;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result)<br>{<br>&nbsp;&nbsp;&nbsp; if ((NULL == src_buf) || (src_len &lt;= 0) || vec_par.size() &lt;= 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>&nbsp;&nbsp;&nbsp; for (size_t t = 0; t &lt; vec_par.size(); ++t)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(0 &gt;= vec_par[t].size())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>&nbsp;&nbsp;&nbsp; }  <p>&nbsp;&nbsp;&nbsp; vec_result.clear();  <p>&nbsp;&nbsp;&nbsp; vector&lt;char&gt; vec_tmp;<br>&nbsp;&nbsp;&nbsp; BOOL bMatched = FALSE;<br>&nbsp;&nbsp;&nbsp; int nParCount = vec_par.size();<br>&nbsp;&nbsp;&nbsp; int nParTick = 0;<br>&nbsp;&nbsp;&nbsp; char*cp = (char*)src_buf;<br>&nbsp;&nbsp;&nbsp; char*src_end = (char*)src_buf +&nbsp; src_len;<br>&nbsp;&nbsp;&nbsp; int&nbsp; nParLen = (int)vec_par[0].size();<br>&nbsp;&nbsp;&nbsp; char*find_buf = (char*)&amp;(vec_par[0][0]);<br>&nbsp;&nbsp;&nbsp; char*find_end = find_buf + nParLen;<br>&nbsp;&nbsp;&nbsp; char*s_src = NULL, *s_find = NULL;  <p>&nbsp;&nbsp;&nbsp; while (cp &lt; src_end)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_src = cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_find = (char*)find_buf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (s_src &lt; src_end &amp;&amp; s_find &lt; find_end &amp;&amp; *s_src == *s_find)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++s_src,++s_find;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s_find == find_end)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bMatched = TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp += nParLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.clear();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++nParTick;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nParCount == nParTick)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nParTick = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nParLen = (int)(vec_par[nParTick].size());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; find_buf = (char*)&amp;(vec_par[nParTick][0]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; find_end = find_buf + nParLen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.push_back(*cp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(TRUE == bMatched)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp; return(bMatched);<br>}  <p>BOOL Glob_Fun::ParserMem(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const void*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_buf, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_len, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const vector&lt;char&gt;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_par, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt; vector&lt;char&gt; &gt;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result)<br>{<br>&nbsp;&nbsp;&nbsp; if ((NULL == src_buf) || (src_len &lt;= 0) || vec_par.size() &lt;= 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>&nbsp;&nbsp;&nbsp; vec_result.clear();  <p>&nbsp;&nbsp;&nbsp; vector&lt;char&gt; vec_tmp;<br>&nbsp;&nbsp;&nbsp; BOOL bMatched = FALSE;<br>&nbsp;&nbsp;&nbsp; char*cp = (char*)src_buf;<br>&nbsp;&nbsp;&nbsp; char*src_end = (char*)src_buf +&nbsp; src_len;<br>&nbsp;&nbsp;&nbsp; int&nbsp; nParLen = (int)vec_par.size();<br>&nbsp;&nbsp;&nbsp; char*find_buf = (char*)&amp;(vec_par[0]);<br>&nbsp;&nbsp;&nbsp; char*find_end = find_buf + nParLen;<br>&nbsp;&nbsp;&nbsp; char*s_src = NULL, *s_find = NULL;  <p>&nbsp;&nbsp;&nbsp; while (cp &lt; src_end)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_src = cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_find = (char*)find_buf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (s_src &lt; src_end &amp;&amp; s_find &lt; find_end &amp;&amp; *s_src == *s_find)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++s_src, ++s_find;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s_find == find_end)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bMatched = TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp += nParLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.clear();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.push_back(*cp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(TRUE == bMatched)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp; return(bMatched);<br>}  <p>BOOL Glob_Fun::ParserMem(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const void*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_buf, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_len, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; par_buf, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt; vector&lt;char&gt; &gt;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result)<br>{<br>&nbsp;&nbsp;&nbsp; if ((NULL == src_buf) || (src_len &lt;= 0) || strlen(par_buf) &lt;= 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>&nbsp;&nbsp;&nbsp; vec_result.clear();  <p>&nbsp;&nbsp;&nbsp; vector&lt;char&gt; vec_tmp;<br>&nbsp;&nbsp;&nbsp; BOOL bMatched = FALSE;<br>&nbsp;&nbsp;&nbsp; char*cp = (char*)src_buf;<br>&nbsp;&nbsp;&nbsp; char*src_end = (char*)src_buf +&nbsp; src_len;<br>&nbsp;&nbsp;&nbsp; int&nbsp; nParLen = strlen(par_buf);<br>&nbsp;&nbsp;&nbsp; char*find_buf = (char*)par_buf;<br>&nbsp;&nbsp;&nbsp; char*find_end = find_buf + nParLen;<br>&nbsp;&nbsp;&nbsp; char*s_src = NULL, *s_find = NULL;  <p>&nbsp;&nbsp;&nbsp; while (cp &lt; src_end)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_src = cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_find = (char*)find_buf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (s_src &lt; src_end &amp;&amp; s_find &lt; find_end &amp;&amp; *s_src == *s_find)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++s_src, ++s_find;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s_find == find_end)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bMatched = TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp += nParLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.clear();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.push_back(*cp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(TRUE == bMatched)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp; return(bMatched);<br>}  <p>BOOL Glob_Fun::ParserMem(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const void*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_buf, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src_len, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; par_buf, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt;string&gt;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result)<br>{<br>&nbsp;&nbsp;&nbsp; if ((NULL == src_buf) || (src_len &lt;= 0) || strlen(par_buf) &lt;= 0) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>&nbsp;&nbsp;&nbsp; vec_result.clear();  <p>&nbsp;&nbsp;&nbsp; string vec_tmp;<br>&nbsp;&nbsp;&nbsp; BOOL bMatched = FALSE;<br>&nbsp;&nbsp;&nbsp; char*cp = (char*)src_buf;<br>&nbsp;&nbsp;&nbsp; char*src_end = (char*)src_buf +&nbsp; src_len;<br>&nbsp;&nbsp;&nbsp; int&nbsp; nParLen = strlen(par_buf);<br>&nbsp;&nbsp;&nbsp; char*find_buf = (char*)par_buf;<br>&nbsp;&nbsp;&nbsp; char*find_end = find_buf + nParLen;<br>&nbsp;&nbsp;&nbsp; char*s_src = NULL, *s_find = NULL;  <p>&nbsp;&nbsp;&nbsp; while (cp &lt; src_end)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_src = cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_find = (char*)find_buf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (s_src &lt; src_end &amp;&amp; s_find &lt; find_end &amp;&amp; *s_src == *s_find)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++s_src, ++s_find;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s_find == find_end)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bMatched = TRUE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp += nParLen;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.clear();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_tmp.push_back(*cp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ++cp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(TRUE == bMatched)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vec_result.push_back(vec_tmp);<br>&nbsp;&nbsp;&nbsp; return(bMatched);<br>}  <img src ="http://www.cppblog.com/woaidongmao/aggbug/54382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-06-23 15:43 <a href="http://www.cppblog.com/woaidongmao/archive/2008/06/23/54382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>