﻿<?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>IT博客网-游子的博客</title><link>http://www.cnitblog.com/liaoqingshan/</link><description>慈母手中线，游子身上衣，
临行密密缝，意恐迟迟归，
谁言寸草心，报得三春晖。


数据读取中，请稍候......</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 13:28:33 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 13:28:33 GMT</pubDate><ttl>60</ttl><item><title>防贼：用电脑+普通摄像头视频监控</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48347.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Mon, 25 Aug 2008 09:43:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48347.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/48347.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48347.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/48347.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/48347.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 可能要出差一段时间，对家里的安全不放心。于是想要做个视频监控软件，网上有个现成的，功能比较全，叫supervisioncam,下载：<a href="http://www.pa360.net.cn/zonghe/USB-JIANKONG.htm">http://www.pa360.net.cn/zonghe/USB-JIANKONG.htm</a>，但我发现它很不好用，占用CPU经常是100%，且发送邮件经常不成功。其它的我没有发现比它更好，也许你找到了，请告诉我一声。<br>&nbsp;&nbsp;&nbsp; 所以我决定自己做一个，在网上发现许多程序片断。因为没有做过，看不懂得，好不容易一到整个项目的源代码，还成功的运行了，捕获到了视频，并保存到了文件。<br>&nbsp;&nbsp; 太好了，接下来就好办了，只要修改修改代码，增加一些功能，就可以了。到昨天晚上为止，我已经实现了发现有物体移动时，自动拍照，保存功能----虽然有时候判断不太准，会因为光线的增强，减弱而误认为画面变化，但它决不会漏掉某些变化，运行也很稳定，占用CPU很少。<br>&nbsp;&nbsp;&nbsp; 我现在在公司，可以用FTP连接到我的电脑，就可以查看家里的情况了。接下来的工作就是把保存下的图片自动发送到我邮箱和手机了。<br>&nbsp;&nbsp;&nbsp; 如果有朋友需要，可以在此留下email，我免费赠送。
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/48347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-08-25 17:43 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我要增肥</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48345.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Mon, 25 Aug 2008 09:23:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48345.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/48345.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/48345.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/48345.html</trackback:ping><description><![CDATA[为了增强我在篮下的&#8220;霸主地位&#8221;，我决定实施增肥计划。现50多公斤，计划达到70公斤。时间：一年到无限长！增肥办法，多做力量训练，多吃，多睡。<br>深圳的健身房太贵（去一次30元），就不去了，在家里练吧。买两袋大米，分装好各种大小重量的，应该可以达到一样的效果。<br>就是饮食比较难办，按书上的说法，每天要吃5，6餐，还要吃许多的品种，我没有办法做到啊。
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/48345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-08-25 17:23 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/08/25/48345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【篮球赛程】2008奥运篮球详细赛程公布 中国男篮8月10日首战梦之队</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/08/06/47703.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 06 Aug 2008 06:08:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/08/06/47703.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/47703.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/08/06/47703.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/47703.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/47703.html</trackback:ping><description><![CDATA[<strong>【篮球赛程】2008奥运篮球详细赛程公布 中国男篮8月10日首战梦之队</strong><font color=#999999><br></font>&nbsp;北京奥运会中国男篮预赛赛程如下： <br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月10日22:15&nbsp;中国男篮VS美国男篮 (周日)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月12日16:45&nbsp;中国男篮VS西班牙男篮&nbsp; (周二)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月14日14:30&nbsp;中国男篮VS安哥拉男篮 (周四)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月16日20:00&nbsp;中国男篮VS资格赛球队 (周六)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月18日14:30&nbsp;中国男篮VS资格赛球队 <br><br>&nbsp;&nbsp;&nbsp;&nbsp;北京奥运会中国女篮预赛赛程如下： <br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月9日14:30&nbsp;中国女篮VS资格赛球队 (周六)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月11日20:00&nbsp;中国女篮VS美国女篮 <br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月13日16:45&nbsp;中国女篮VS新西兰女篮 <br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月15日16:45&nbsp;中国女篮VS马里女篮 <br><br>&nbsp;&nbsp;&nbsp;&nbsp;8月17日20:00&nbsp;中国女篮VS资格赛球队&nbsp;<br>&nbsp; <br>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/47703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-08-06 14:08 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/08/06/47703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3G手机综述</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/05/28/44463.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 28 May 2008 05:43:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/05/28/44463.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/44463.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/05/28/44463.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/44463.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/44463.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 3G手机的介绍，包括概念，资费，应用等。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2008/05/28/44463.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/44463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-05-28 13:43 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/05/28/44463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你的眼睛有多少像素？ </title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/05/13/43664.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Tue, 13 May 2008 07:17:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/05/13/43664.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/43664.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/05/13/43664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/43664.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/43664.html</trackback:ping><description><![CDATA[<p>原作者：<a onfocus=undefined href="http://hugofdestruction.deviantart.com/"><font color=#105cb6>huGoFdeStruction</font></a><br>译者：<a onfocus=undefined href="http://jandan.net/author/admin"><font color=#105cb6>sein</font></a><br>发表时间：2007-03-20</p>
<p>人眼视网膜平均有500万个锥细胞。因为锥细胞负责色彩感应，或许可以说人眼的平均解析度已经达到500万像素水平。<br><font color=#ffffff># Copyright for </font><a onfocus=undefined href="http://jandan.net/"><font color=#ffffff>Jandan.net</font></a><font color=#ffffff>(http://jandan.net/)</font><br>不过还有100万个杆细胞负责光强度感应，它决定了你所看到图像的清晰度。眼睛是不可低估的，毕竟它不是一台静止的相机。</p>
<p>你的两只眼睛连续扫视一周时，在你的大脑已经合成好大范围的场景(而非全景图像)。当光线好的时候，你能分辨两根0.01度视角(0.6弧度)的细线。</p>
<p>如此一来，可以估算人眼的&#8220;像素&#8221;单元是0.3弧度。保守估算你的视野在水平方向为120度，垂直方向为60度的话，那么你视野的解析度为576万&#8220;像素&#8221;。</p>
<p>奇怪的是，经常有这种情况发生：从相同距离观看时，大多数人不能区分 300dpi 和 150dpi 的6&#215;4寸 的相片。</p>
<p>因此，即使人眼和大脑联合可以处理大量数据，但是从静态图像来说，150dpi 的输出解析度是足够让人们普遍接受的图像质量。</p>
<p>但是，女性比男性有更多的锥细胞和杆细胞。所以在光线比较暗时，女性能看到的缤纷景象在男性看起来也许是一片漆黑。</p>
<p># 附上几幅 deviantART 的艺术家关于&#8220;眼睛&#8221;主题的摄影：<span id=more-1332></span></p>
<p><a onfocus=undefined href="http://www.deviantart.com/deviation/1451421/"><img alt="" src="http://farm1.static.flickr.yahoo8.akadns.net/185/427861250_839c4cb7d7.jpg"></a></p>
<p><a onfocus=undefined href="http://www.deviantart.com/deviation/24142408/"><img alt="" src="http://farm1.static.flickr.yahoo8.akadns.net/96/427860895_6788e14fe6.jpg"></a></p>
<p><a onfocus=undefined href="http://www.deviantart.com/deviation/50783351/"><img alt="" src="http://farm1.static.flickr.yahoo8.akadns.net/162/427860665_af78231103.jpg"></a></p>
<p><a onfocus=undefined href="http://www.deviantart.com/deviation/50783351/"><img alt="" src="http://farm1.static.flickr.yahoo8.akadns.net/149/427860843_5179205a06.jpg"></a></p>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/43664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-05-13 15:17 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/05/13/43664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速排序算法及源代码（C语言）</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/03/19/41163.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 19 Mar 2008 07:21:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/03/19/41163.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/41163.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/03/19/41163.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/41163.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/41163.html</trackback:ping><description><![CDATA[<div class=cnt id=blog_text>
<h2><a href="http://www.cnblogs.com/sunlin886/archive/2007/03/17/678027.html"><u><font color=#0000ff>快速排序算法</font></u></a> </h2>
<div class=postbody twffan="done">快速排序是对冒泡排序的一种改进。它的基本思想是：通过一躺排序将要排序的数据分割成独立的两部分，其中一部分的所有数据都比另外一不部分的所有数据都要小，然后再按次方法对这两部分数据分别进行快速排序，整个排序过程可以递归进行，以此达到整个数据变成有序序列。<br><br>假设要排序的数组是A[1]&#8230;&#8230;A[N]，首先任意选取一个数据（通常选用第一个数据）作为关键数据，然后将所有比它的数都放到它前面，所有比它大的数都放到它后面，这个过程称为一躺快速排序。一躺快速排序的算法是： <br><br>1）、设置两个变量I、J，排序开始的时候I：=1，J：=N； <br><br>2）以第一个数组元素作为关键数据，赋值给X，即X：=A[1]； <br><br>3）、从J开始向前搜索，即由后开始向前搜索（J：=J-1），找到第一个小于X的值，两者交换； <br><br>4）、从I开始向后搜索，即由前开始向后搜索（I：=I+1），找到第一个大于X的值，两者交换； <br><br>5）、重复第3、4步，直到I=J； <br><br>例如：待排序的数组A的值分别是：（初始关键数据X：=49） <br><br>A[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[5]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[6]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[7]：&nbsp;&nbsp;<br><br>49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27 <br><br>进行第一次交换后：&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49 <br><br>( 按照算法的第三步从后面开始找 <br><br>进行第二次交换后：&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65 <br><br>( 按照算法的第四步从前面开始找&gt;X的值，65&gt;49,两者交换，此时I：=3 ) <br><br>进行第三次交换后：&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65 <br><br>( 按照算法的第五步将又一次执行算法的第三步从后开始找 <br><br>进行第四次交换后：&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65 <br><br>( 按照算法的第四步从前面开始找大于X的值，97&gt;49,两者交换，此时J：=4 ) <br><br>此时再执行第三不的时候就发现I=J，从而结束一躺快速排序，那么经过一躺快速排序之后的结果是：27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65，即所以大于49的数全部在49的后面，所以小于49的数全部在49的前面。 <br><br>快速排序就是递归调用此过程——在以49为中点分割这个数据序列，分别对前面一部分和后面一部分进行类似的快速排序，从而完成全部数据序列的快速排序，最后把此数据序列变成一个有序的序列，根据这种思想对于上述数组A的快速排序的全过程如图6所示： <br><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; {49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27}&nbsp;&nbsp;&nbsp;&nbsp;<br><br>进行一次快速排序之后划分为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp; {76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65} <br><br>分别对前后两部分进行快速排序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>结束&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结束&nbsp;&nbsp;&nbsp;&nbsp; {49&nbsp;&nbsp;&nbsp;&nbsp; 65}&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;<br><br>49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结束 <br><br>结束 <br><br>图6&nbsp;&nbsp;&nbsp;&nbsp; 快速排序全过程<br><br>1）、设有N（假设N=10）个数，存放在S数组中；<br><br>2）、在S[1。。N]中任取一个元素作为比较基准，例如取T=S[1]，起目的就是在定出T应在排序结果中的位置K，这个K的位置在：S[1。。K-1]&lt;=S[K]&lt;=S[K+1..N]，即在S[K]以前的数都小于S[K]，在S[K]以后的数都大于S[K]；<br><br>3）、利用分治思想（即大化小的策略）可进一步对S[1。。K-1]和S[K+1。。N]两组数据再进行快速排序直到分组对象只有一个数据为止。<br><br>如具体数据如下，那么第一躺快速排序的过程是：<br><br>数组下标： 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br><br>45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36<br><br>I&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J <br><br>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 45<br><br>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53<br><br>（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53<br><br>（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53<br><br>（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53<br><br>通过一躺排序将45放到应该放的位置K，这里K=6，那么再对S[1。。5]和S[6。。10]分别进行快速排序。 </div>
</div>
<p><br>以下是我改写的代码，通过测试:<br>BOOL QuickSort(U16*p,int num)<br>{<br>&nbsp;int i;<br>&nbsp;int n_small=1,n_big=num-1;//升序<br>&nbsp;U16 m_key=p[0];<br>&nbsp;BOOL xiaokong=true;//小头有空<br>&nbsp;int m_free = 0;</p>
<p>&nbsp;if(num&lt;=1)return true;///递归终止条件<br>&nbsp;for(i=0;i&lt;num-1;i++)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp; if(xiaokong)//小头有空<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; if(p[n_big]&lt;m_key)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p[m_free]=p[n_big];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_free=n_big;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xiaokong=false;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n_big--;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else//大头有空<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; if(p[n_small]&gt;m_key)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p[m_free]=p[n_small];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_free=n_small;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xiaokong=true;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n_small++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;}<br>&nbsp;if(m_free != 0)<br>&nbsp;{<br>&nbsp;&nbsp;p[m_free]=m_key;<br>&nbsp;}<br>&nbsp;//printf("num=%d[", num);<br>&nbsp;//for( i = 0; i&lt; num; i++) printf("%d,", p[i]);<br>&nbsp;//printf("]key=%d, mid = %d, small=%d, big=%d, from %d num %d &amp;&amp; from %d num %d\n",<br>&nbsp;//&nbsp;m_key, m_free, n_small, n_big, 0,m_free, m_free+1, num-(m_free+1) );<br>&nbsp;if(QuickSort(&amp;p[0],m_free) &amp;&amp; QuickSort(&amp;p[m_free+1],num-(m_free+1) ) )<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp; return true;<br>&nbsp;}<br>&nbsp;return false;<br>}</p>
<p><br>void QuickSortTest(void)<br>{<br>&nbsp;int i;<br>&nbsp;U16 sortTest[20] = {23,4,6,9,5,7,4,12,12,23,4,9999,89,1000,1000,4,2334,989,12,20};<br>&nbsp;U16 sortTest2[10] = {10,9,8,7,6,5,4,3,2,1};<br>&nbsp;U16 sortTest3[10] = {0,1,2,3,4,5,6,7,8,9};<br>&nbsp;for( i = 0; i&lt;20; i++) printf("%d，",sortTest[i]);&nbsp; printf("\n");<br>&nbsp;QuickSort( sortTest, 20);<br>&nbsp;for( i = 0; i&lt;20; i++) printf("%d，",sortTest[i]); printf("\n");</p>
<p>&nbsp;for( i = 0; i&lt;10; i++) printf("%d，",sortTest2[i]);&nbsp; printf("\n");<br>&nbsp;QuickSort( sortTest2, 10);<br>&nbsp;for( i = 0; i&lt;10; i++) printf("%d，",sortTest2[i]); printf("\n");</p>
<p>&nbsp;for( i = 0; i&lt;10; i++) printf("%d，",sortTest3[i]);&nbsp; printf("\n");<br>&nbsp;QuickSort( sortTest3, 10);<br>&nbsp;for( i = 0; i&lt;10; i++) printf("%d，",sortTest3[i]); printf("\n");<br>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/41163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-03-19 15:21 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/03/19/41163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sprintf用法解析</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40573.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 06 Mar 2008 06:32:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40573.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/40573.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40573.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/40573.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/40573.html</trackback:ping><description><![CDATA[<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; sprintf用法解析<br><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作者&nbsp; ：晨星<br><br>1：<br><br>sprintf 最常见的应用之一莫过于把整数打印到字符串中，所以，spritnf<br>在大多数场合可以替代itoa。<br><br>这样，一个整数的16 进制字符串就很容易得到，但我们在打印16 进制内容<br>时，通常想要一种左边补0 的等宽格式，那该怎么做呢？很简单，在表示宽<br>度的数字前面加个0 就可以了。<br><br>sprintf(s, "%08X", 4567); //产生："000011D7"<br><br>上面以&#8221;%d&#8221;进行的10 进制打印同样也可以使用这种左边补0 的方式。<br><br>这里要注意一个符号扩展的问题：比如，假如我们想打印短整数（short）-1<br>的内存16 进制表示形式，在Win32 平台上，一个short 型占2 个字节，所<br>以我们自然希望用4 个16 进制数字来打印它：<br><br>short si = -1;<br><br>sprintf(s, "%04X", si);<br><br>产生&#8220;FFFFFFFF&#8221;，怎么回事？因为spritnf 是个变参函数，除了前面两个<br>参数之外，后面的参数都不是类型安全的，函数更没有办法仅仅通过一个<br>&#8220;%X&#8221;就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整<br>数还是个2 字节的短整数，所以采取了统一4 字节的处理方式，导致参数压<br>栈时做了符号扩展，扩展成了32 位的整数-1，打印时4 个位置不够了，就<br>把32 位整数-1 的8 位16 进制都打印出来了。如果你想看si 的本来面目，<br>那么就应该让编译器做0 扩展而不是符号扩展（扩展时二进制左边补0 而不<br>是补符号位）：<br><br>sprintf(s, "%04X", (unsigned short)si);<br><br>就可以了。或者：<br><br>unsigned short si = -1;<br>sprintf(s, "%04X", si);<br><br><br>2：<br><br>浮点数的打印和格式控制是sprintf 的又一大常用功能，浮点数使用格式符&#8221;<br>%f&#8221;控制，默认保留小数点后6 位数字，比如：<br><br>sprintf(s, "%f", 3.1415926); //产生"3.141593"<br><br>但有时我们希望自己控制打印的宽度和小数位数，这时就应该使用：&#8221;<br>%m.nf&#8221;格式，其中m 表示打印的宽度，n 表示小数点后的位数。比如：<br><br>sprintf(s, "%10.3f", 3.1415626); //产生：" 3.142"<br><br>sprintf(s, "%-10.3f", 3.1415626); //产生："3.142 "<br><br>sprintf(s, "%.3f", 3.1415626); //不指定总宽度，产生："3.142"<br><br>注意一个问题，你猜<br><br>int i = 100;<br><br>sprintf(s, "%.2f", i);<br><br>会打出什么东东来？&#8220;100.00&#8221;？对吗？自己试试就知道了，同时也试试下面这个：<br><br>sprintf(s, "%.2f", (double)i);<br><br>第一个打出来的肯定不是正确结果，原因跟前面提到的一样，参数压栈时调<br>用者并不知道跟i相对应的格式控制符是个&#8221;%f&#8221;。而函数执行时函数本身<br>则并不知道当年被压入栈里的是个整数，于是可怜的保存整数i 的那4 个字<br>节就被不由分说地强行作为浮点数格式来解释了，整个乱套了。<br><br><br>3: <br><br>连接字符串<br><br>sprintf 的格式控制串中既然可以插入各种东西，并最终把它们&#8220;连成一<br>串&#8221;，自然也就能够连接字符串，从而在许多场合可以替代strcat，但<br>sprintf 能够一次连接多个字符串（自然也可以同时在它们中间插入别的内<br>容，总之非常灵活）。比如：<br><br>char* who = "I";<br><br>char* whom = "CSDN";<br><br>sprintf(s, "%s love %s.", who, whom); //产生："I love CSDN. "<br><br>strcat 只能连接字符串（一段以&#8217;\0&#8217;结尾的字符数组或叫做字符缓冲，<br>null-terminated-string），<br><br>但有时我们有两段字符缓冲区，他们并不是以&#8217;\0&#8217;结尾。比如许多从第三<br>方库函数中返回的字符数组，从硬件或者网络传输中读进来的字符流，它们<br>未必每一段字符序列后面都有个相应的&#8217;\0&#8217;来结尾。如果直接连接，不管<br>是sprintf 还是strcat 肯定会导致非法内存操作，strncat 也至少要求第<br>一个参数是个null-terminated-string，那该怎么办呢？我们自然会想起前<br>面介绍打印整数和浮点数时可以指定宽度，字符串也一样的。比如：<br><br>char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};<br><br>char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};<br><br>如果：<br><br>sprintf(s, "%s%s", a1, a2); //Don't do that!<br><br>十有八九要出问题了。是否可以改成：<br><br>sprintf(s, "%7s%7s", a1, a2);<br><br>也没好到哪儿去，正确的应该是：<br><br>sprintf(s, "%.7s%.7s", a1, a2);//产生："ABCDEFGHIJKLMN"<br><br>这可以类比打印浮点数的&#8221;%m.nf&#8221;，在&#8221;%m.ns&#8221;中，m 表示占用宽度（字<br>符串长度不足时补空格，超出了则按照实际宽度打印），n 才表示从相应的<br>字符串中最多取用的字符数。通常在打印字符串时m 没什么大用，还是点号<br>后面的n 用的多。自然，也可以前后都只取部分字符：<br><br>sprintf(s, "%.6s%.5s", a1, a2);//产生："ABCDEFHIJKL"<br><br>(因为sprintf函数将输出写入到字符串s中，并以'\0'结束，所以生成的s<br>中有'\0'，所以可以用printf(s),而不用担心会出错)<br><br><br>在许多时候，我们或许还希望这些格式控制符中用以指定长度信息的数字是<br>动态的，而不是静态指定的，因为许多时候，程序要到运行时才会清楚到底<br>需要取字符数组中的几个字符，这种动态的宽度/精度设置功能在sprintf<br>的实现中也被考虑到了，sprintf 采用&#8221;*&#8221;来占用一个本来需要一个指定<br>宽度或精度的常数数字的位置，同样，而实际的宽度或精度就可以和其它被<br>打印的变量一样被提供出来，于是，上面的例子可以变成：<br><br>sprintf(s, "%.*s%.*s", 7, a1, 7, a2);<br><br>或者：<br><br>sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);<br><br>实际上，前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值，<br>比如：<br><br>sprintf(s, "%-*d", 4, 'A'); //产生"65 "<br><br>sprintf(s, "%#0*X", 8, 128); //产生"0X000080"，"#"产生0X<br><br>sprintf(s, "%*.*f", 10, 2, 3.1415926); //产生" 3.14"<br><br>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/40573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-03-06 14:32 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sprintf 用法大全与实例</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40572.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 06 Mar 2008 06:31:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40572.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/40572.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/40572.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/40572.html</trackback:ping><description><![CDATA[<h2 class=diaryTitle>sprintf格式</h2>
&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<p>&#160;</p>
<h1><a id=sprintf.a5.d5.a5.a9.a1.bc.a5.de.a5.c3.a5.c8 name=sprintf.a5.d5.a5.a9.a1.bc.a5.de.a5.c3.a5.c8>sprintf格式</a><!-- RDLabel: "sprintf格式" --></h1>
<p>Ruby的sprintf格式与C语言的<font color=#0000ff>sprintf(3)</font>基本相同。但还是有些差别: 它没有针对C特有类型的修饰符,如short或long等; 它包含2进制数的指示符(%b); 它不支持sprintf的方言式的语法。</p>
<p>下面就对ruby的sprintf格式进行详细的说明。</p>
<p>sprintf格式的规格如下所示。<code><font face=新宋体>[]</font></code>中的部分是可选的。</p>
<pre>%[指定参数$][标识符][宽度][.精度]指示符
</pre>
<p>若想输出`<code><font face=新宋体>%</font></code>'本身时, 请这样`<code><font face=新宋体>%%</font></code>'处理。</p>
<p>下面就分别介绍一下各元素的用法。</p>
<h2><a id=a.a5.d5.a5.e9.a5.b0 name=a.a5.d5.a5.e9.a5.b0>标识符</a><!-- RDLabel: "标识符" --></h2>
<p>标识符包括`#', `+', ` '(空格), `-'和`0'这5个。</p>
<dl>
<dt><a id=a.23 name=a.23>#</a><!-- RDLabel: "#" -->
<dd>
<p>使用2进制、8进制、16进制的指示符(`b', `o', `x', `X')时, 会分别添加"0b", "0", "0x", "0X"前缀。</p>
<pre>p sprintf("%#b", 10) # =&gt; "0b1010"
p sprintf("%#o", 10) # =&gt; "012"
p sprintf("%#x", 10) # =&gt; "0xa"
p sprintf("%#X", 10) # =&gt; "0XA"
</pre>
<p>对于浮点数 (`f', `e', `E', `g', `G'), 则必定在输出中添加"."。</p>
<pre>p sprintf("%.0f", 10) # =&gt; "10"
p sprintf("%#.0f", 10) # =&gt; "10."
p sprintf("%.0e", 10) # =&gt; "1e+01"
p sprintf("%#.0e", 10) # =&gt; "1.e+01"
</pre>
<p>`g', `G'除了具有上述特性外, 还会在末尾添加多余的0。</p>
<pre>p sprintf("%.05g", 10) # =&gt; "10"
p sprintf("%#.05g", 10) # =&gt; "10.000"
</pre>
<dt><a id=a.2b name=a.2b>+</a><!-- RDLabel: "+" -->
<dd>
<p>使输出字符串带上符号。如果是正数的话, 就会添加`+'。它只对数值指示符(`d', `i', `b', `o', `x', `X', `u', `f', `e', `E', `g', `G')起作用。另外, 如果是`b', `o', `x', `X', `u'的话, 则会为负数添加`-'。</p>
<pre>p sprintf("%d", 1)   # =&gt; "1"
p sprintf("%+d", 1)  # =&gt; "+1"
p sprintf("%x", -1)  # =&gt; "..f"  # ".." 表示f无限延续
p sprintf("%+x", -1) # =&gt; "-1"
</pre>
<dt><a id=a.27.20.27.28.a5.b9.a5.da.a1.bc.a5.b9.29 name=a.27.20.27.28.a5.b9.a5.da.a1.bc.a5.b9.29>' '(空格)</a><!-- RDLabel: "' '(空格)" -->
<dd>
<p>与`+'相同, 用空格来代替正号`+'。它只对数值指示符(`d', `i', `b', `o', `x', `X', `u', `f', `e', `E', `g', `G')起作用。</p>
<pre>p sprintf("%d", 1)   # =&gt; "1"
p sprintf("%+d", 1)  # =&gt; "+1"
p sprintf("% d", 1)  # =&gt; " 1"
p sprintf("%x", -1)  # =&gt; "..f"
p sprintf("% x", 1)  # =&gt; " 1"
p sprintf("% x", -1) # =&gt; "-1"
</pre>
<dt><a id=a- name=a->-</a><!-- RDLabel: "-" -->
<dd>
<p>使输出内容靠左. 若尚未指定<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.c9.fd"><u><font color=#0000ff>宽度</font></u></a>的话,则不起作用。</p>
<dt><a id=a0 name=a0>0</a><!-- RDLabel: "0" -->
<dd>
<p>当输出内容靠右时, 使用`0'而并非空格来填充多余部分。</p>
<p>它只对数值指示符(`d', `i', `b', `o', `x', `X', `u', `f', `g', `G')起作用(对`e', `E'无效)</p>
<pre>p sprintf("%010d", 10)
# =&gt; "0000000010"
</pre>
<p>与`#'一起使用时, 输出情况如下。</p>
<pre>p sprintf("%#010x", 10)  # =&gt; "0x0000000a"
p sprintf("%#010o", 10)  # =&gt; "0000000012"
p sprintf("%#010b", 10)  # =&gt; "0b00001010"
</pre>
<p>它等同于下例。</p>
<pre>p sprintf("%#10.8x", 10) # =&gt; "0x0000000a"
p sprintf("%#10.9o", 10) # =&gt; "0000000012"
p sprintf("%#10.8b", 10) # =&gt; "0b00001010"
</pre>
<p>通常情况下, 会输出如下内容。</p>
<pre>p sprintf("%#10x", 10)   # =&gt; "       0xa"
p sprintf("%#10o", 10)   # =&gt; "       012"
p sprintf("%#10b", 10)   # =&gt; "    0b1010"
</pre>
</dd></dl>
<h2><a id=a.c9.fd name=a.c9.fd>宽度</a><!-- RDLabel: "宽度" --></h2>
<p>以非0数字开头的数串负责指定宽度。宽度是指生成字符串的宽度, 它不受后文中的<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.c0.ba.c5.d9"><u><font color=#0000ff>精度</font></u></a>的限制。</p>
<p>确定宽度时, 也会考虑<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.a5.d5.a5.e9.a5.b0"><u><font color=#0000ff>标识符</font></u></a>中附加的" ", "+","-", "0b", "0", "0x", "0X"的长度。</p>
<pre>p sprintf("%#05x", 10) # =&gt; "0x00a"
</pre>
<p>宽度是指"必要的最小宽度". 若结果字符串的宽度超过指定宽度时, 指定宽度就会失效。</p>
<p>若将宽度指定为`*'时, 将从参数中取得宽度值。</p>
<pre>p sprintf("%10s", "foo")    # =&gt; "       foo"
p sprintf("%*s", 10, "foo") # =&gt; "       foo"
</pre>
<h2><a id=a.c0.ba.c5.d9 name=a.c0.ba.c5.d9>精度</a><!-- RDLabel: "精度" --></h2>
<p>紧跟在"."后面的数串表示精度(若只有"."的话，则为".0")。若遇到整数的指示符(`d', `i', `b', `o', `x', `X', `u')的话，精度表示数值部分的长度。</p>
<pre>p sprintf("%10.5d", 1)  # =&gt; "     00001"
p sprintf("%#10.5x", 1) # =&gt; "   0x00001"
p sprintf("%+10.5x", 1) # =&gt; "    +00001"
</pre>
<p>若遇到浮点数的指示符(`f')的话，它表示小数部分的位数。</p>
<pre>p sprintf("%10.5f", 1)   # =&gt; "   1.00000"
p sprintf("%10.5f", 10)  # =&gt; "  10.00000"
</pre>
<p>若遇到浮点数的指示符(`e', `E', `g', `G')的话，它表示有效位数。</p>
<pre>p sprintf("%10.5e", 1)   # =&gt; "1.00000e+00"
p sprintf("%10.5e", 10)  # =&gt; "1.00000e+01"
p sprintf("%10.5g",  10)  # =&gt; "        10"
p sprintf("%#10.5G", 10)  # =&gt; "    10.000"
</pre>
<p>如果是字符串指示符(`s', `p')的话，将会按照精度的规定来检查参数中的字符串长度，并切除多余部分。若将宽度和精度设为同值的话，则只输出参数字符串中的符合精度规定的部分。</p>
<pre>p sprintf("%10.2s", "foo")  # =&gt; "        fo"
p sprintf("%5.5s", "foo")     # =&gt; # =&gt; "  foo"
p sprintf("%5.5s", "foobar")  # =&gt; # =&gt; "fooba"
</pre>
<p>若将精度设为`*'的话，将从参数中提取精度的值。</p>
<pre>p sprintf("%.5s", "foobar")    # =&gt; "fooba"
p sprintf("%.*s", 5, "foobar") # =&gt; "fooba"
</pre>
<h2><a id=a.bb.d8.bc.a8.bb.d2 name=a.bb.d8.bc.a8.bb.d2>指示符</a><!-- RDLabel: "指示符" --></h2>
<p>指示符指出参数的类型，且是必选的。大体说来它包括：</p>
<ul>
    <li>表示字符串的指示符: `c', `s', `p'
    <li>表示整数的指示符: `d', `i', `u', `b', `o', `x', `X',
    <li>表示浮点数的指示符: `f', `g', `e', `E', `G' </li>
</ul>
<p>这几类。</p>
<dl>
<dt><a id=c name=c>c</a><!-- RDLabel: "c" -->
<dd>
<p>将参数的数值(0&#215;255)看作是字符代码，并输出对应的字符。若参数并非数值、String、 nil, true或false的话，将尝试用to_int方法进行变换。</p>
<p>此时，只有<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.a5.d5.a5.e9.a5.b0"><u><font color=#0000ff>标识符</font></u></a>`-'和"<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.c9.fd"><u><font color=#0000ff>宽度</font></u></a>"的设定是有效的。</p>
<dt><a id=s name=s>s</a><!-- RDLabel: "s" -->
<dd>
<p>输出字符串。</p>
<p>若参数并非<font color=#0000ff>String</font>对象的话，将使用to_s方法对其进行变换。</p>
<dt><a id=p name=p>p</a><!-- RDLabel: "p" -->
<dd>
<p><font color=#0000ff>ruby 1.8 特性</font>: 输出<font color=#0000ff>Object#inspect</font>的结果。</p>
<pre>p sprintf("%s", [1, 2, 3])      # =&gt; "123"
p sprintf("%p", [1, 2, 3])      # =&gt; "[1, 2, 3]"
</pre>
<dt><a id=d name=d>d</a><!-- RDLabel: "d" -->
<dt><a id=i name=i>i</a><!-- RDLabel: "i" -->
<dd>
<p>以10进制整数的形式输出参数中的数值。</p>
<p>若参数并非整数，则使用与<font color=#0000ff>Integer</font>函数相同的规则将其变为整数。</p>
<dt><a id=u name=u>u</a><!-- RDLabel: "u" -->
<dd>
<p>将参数的数值看作是无符号整数，并以10进制整数的形式输出它。</p>
<pre>p sprintf("%u", -1) # =&gt; "..4294967295"
</pre>
<p>上面的代码会输出 p ".." + 0xffff_ffff.to_s。</p>
<p><font color=#0000ff>ruby 1.7 特性</font>: 在version 1.7中，不会附加".."。若是'%u'的话，则将参数看作是定长整数。此时，对于负整数n来说</p>
<pre>printf("%u", n)
</pre>
<p>与</p>
<pre>printf("%d", n &amp; ~(-1 &lt;&lt; n.size*8))
</pre>
<p>是一个意思。</p>
<dt><a id=b name=b>b</a><!-- RDLabel: "b" -->
<dt><a id=o name=o>o</a><!-- RDLabel: "o" -->
<dt><a id=x name=x>x</a><!-- RDLabel: "x" -->
<dt><a id=X name=X>X</a><!-- RDLabel: "X" -->
<dd>
<p>分别以2进制、8进制、16进制、16进制(大写字母)字符串的形式输出整数。</p>
<p>若使用了`#' 标识符的话，则分别在前面添加"0b", "0", "0x", "0X"。</p>
<p>若没有使用`+', ` ' 标识符时，将在负数的前面(若有`#' 标识符，则在"0x"等的后面)添加".."。这表示最高位字符无限延伸，它采用了2的补数形式来表现负数。</p>
<pre>p sprintf("%#b", 10)    # =&gt; "0b1010"
p sprintf("%#o", 10)    # =&gt; "012"
p sprintf("%#x", 10)    # =&gt; "0xa"
# 对负数添加".."
p sprintf("%#b", -1)    # =&gt; "0b..1"
p sprintf("%#o", -1)    # =&gt; "0..7"
p sprintf("%#x", -1)    # =&gt; "0x..f"
p sprintf("%10x", -1)   # =&gt; "       ..f"
p sprintf("%-10x", -1)  # =&gt; "..f       "
# 若指定了"精度"的话，则不会添加".."
p sprintf("%.10x", -1)  # =&gt; "ffffffffff"
</pre>
<dt><a id=f name=f>f</a><!-- RDLabel: "f" -->
<dt><a id=e name=e>e</a><!-- RDLabel: "e" -->
<dt><a id=E name=E>E</a><!-- RDLabel: "E" -->
<dt><a id=g name=g>g</a><!-- RDLabel: "g" -->
<dt><a id=G name=G>G</a><!-- RDLabel: "G" -->
<dd>
<p>`f' 以小数点形式(xxx.xxx)输出数值。</p>
<p>`e' 以指数形式(x.xxxe+xx)输出数值。</p>
<p>`g' 的情况比较特殊。当指数小于-4或者超出精度范围时，它采用`e'方式进行输出。除此之外，它采用`f'方式进行输出。另外，它会删除小数部分尾部的0。</p>
<p>大写字母指示符(`E', `G')会将输出中的字母变为大写形式。</p>
<pre>p sprintf("%f", 1.0) # =&gt; "1.000000"
p sprintf("%e", 1.0) # =&gt; "1.000000e+00"
p sprintf("%g", 1.0) # =&gt; "1"
p sprintf("%f", 10.1) # =&gt; "10.100000"
p sprintf("%e", 10.1) # =&gt; "1.010000e+01"
p sprintf("%g", 10.1) # =&gt; "10.1"
p sprintf("%g", 10 ** 6)  # =&gt; "1e+06"
p sprintf("%g", 10 ** -5) # =&gt; "1e-05"
</pre>
<p>精度的缺省值为6。</p>
<p>若遇到无限大值或NaN(Not a Number)时，输出情况如下。</p>
<pre>p sprintf("%f",  1.0/0)  # =&gt; "inf"
p sprintf("%f", -1.0/0)  # =&gt; "-inf"
p sprintf("%f",  0.0/0)  # =&gt; "nan"
p sprintf("%E",  1.0/0)  # =&gt; "INF"
p sprintf("%E", -1.0/0)  # =&gt; "-INF"
p sprintf("%E",  0.0/0)  # =&gt; "NAN"
</pre>
</dd></dl>
<h2><a id=a.b0.fa.bf.f4.bb.d8.c4.ea name=a.b0.fa.bf.f4.bb.d8.c4.ea>指定参数</a><!-- RDLabel: "指定参数" --></h2>
<p>这部分的利用频率最低，所以放在最后。</p>
<dl>
<dt><a id=nth.24 name=nth.24>nth$</a><!-- RDLabel: "nth$" -->
<dd>
<p>表示将使用第<var>nth</var>个参数进行格式化操作。</p>
<pre>p sprintf("%1$d, %1$x, %1$o", 10)
=&gt; "10, a, 12"
p sprintf("%3$d, %2$x, %1$o", 1, 2, 3)
=&gt; "3, 2, 1"
</pre>
<p>若您不想改变参数的顺序而只想改变格式的话，也可以使用它。</p>
<pre>case ENV['LC_TIME']
when /^ja_JP/
fmt = "%1$d年%2$d月%3$d日"
else
fmt = "%2$02d/%03$2d/%1$02d"
end
p sprintf(fmt, 1, 4, 22)
=&gt; "04/22/01"
</pre>
<p>您也可以先插入"*"，然后借用参数来设定"<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.c9.fd"><u><font color=#0000ff>宽度</font></u></a>"和"<a class=modified-year title="sprintf格式 (224d)" href="http://rubycn.ce-lab.net/man/sprintf_format.html#a.c0.ba.c5.d9"><u><font color=#0000ff>精度</font></u></a>"的值。</p>
<pre>p sprintf("%5.2f", 1);              # =&gt; " 1.00"
p sprintf("%*.*f", 5, 2, 1);        # =&gt; " 1.00"
p sprintf("%1$*2$.*3$f", 1, 5, 2);  # =&gt; " 1.00</pre>
</dd></dl>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/40572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2008-03-06 14:31 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/03/06/40572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>久违的学生们</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/11/15/36308.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 15 Nov 2007 05:35:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/11/15/36308.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/36308.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/11/15/36308.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/36308.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/36308.html</trackback:ping><description><![CDATA[<p>2007-11-11日，光棍节。<br>约了学生在华强北见面。<br>都是7年不见了，不知道见面后能认出来吗？<br>到了天虹，正在银行取钱，叶晓林打电话来了，于是就过去商店门口找她。可是到了那里，并没有看见记忆中的小女孩，直到要从她身旁经过，她才在我面前挥手。呀，完全变了模样，以前好象是短头发吧，绝对乡下采蘑菇小女孩的打扮！可现在是直向上，向后梳理的长发了，脸也变了，当然，身高也变了：）聊一会儿，才依稀找出一些以前的模样。<br>还有其它同学都未到，我便再回去取钱，好不容易等前一个人取了几十万，回到店里，又多出了几位女孩----我依然叫不出名字！也许不说，她们也认不出我吧？最后等到的一位是蔡冬梅，从惠州坐了一上午的车来的，真辛苦。说实话，我都没有这么大动力跑这么远与同学见面，汗。<br><br><img height=480 alt="" src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/6515/r_http_imgload.jpg" width=640 border=0><br>吃过饭之后，去了园博园。地方不少，可是人太多，坐下的草地都找不着，照相的景点也上不去。好不容易找到个草坪坐下了，大家开始聊天。她们聊得最多的还是谁谁谁结婚，谁谁谁生孩子了，哈哈。唯独华英不怎么说话，一个人坐在圈外。还有就是林英带来的朋友，大家都主要讲家乡，他也插不上嘴，呵呵。<br>时间过得很快，4点钟不得不起身离开，因为林英还要去上班。说起她，不得不让人惊讶的是，我们同在白石洲住了一年，居然互不知晓。<br>林英先走，然后送走了华英，等要送袁琴和蔡冬梅时，她们不让了，把我先送上了车。这最后的任务交给了叶晓林和陈良英，这是两位老深圳了：）</p>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/36308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-11-15 13:35 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/11/15/36308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NBA07-08赛季常规赛电视视频直播表 ( 按照时间顺序 ) </title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/10/30/35580.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Tue, 30 Oct 2007 04:14:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/10/30/35580.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/35580.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/10/30/35580.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/35580.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/35580.html</trackback:ping><description><![CDATA[<table borderColor=#0099ff cellSpacing=0 cellPadding=0 width=500 border=1>
    <tbody>
        <tr>
            <td colSpan=4 height=32>
            <div align=center><strong>NBA07-08赛季常规赛电视视频直播表 ( 按照时间顺序 ) </strong></div>
            </td>
        </tr>
        <tr>
            <td width=104 height=27>日期 </td>
            <td width=70>直播时间 </td>
            <td width=167>对阵</td>
            <td width=149>网站 电视台</td>
        </tr>
        <tr>
            <td colSpan=4><strong>10月</strong></td>
        </tr>
        <tr>
            <td align=middle>27日 周五</td>
            <td align=middle>10:00</td>
            <td align=middle>
            <table cellSpacing=0 cellPadding=0 width=145 border=0>
                <tbody>
                    <tr>
                        <td class="darkGray a" id=wz1_8 style="CURSOR: pointer" onclick=showInfo1(1,8)>国王vs湖人（季前赛）</td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td><strong>cctv</strong></td>
        </tr>
        <tr>
            <td align=middle>31日 周三</td>
            <td align=middle>11:30</td>
            <td align=middle>火箭vs湖人</td>
            <td><strong>搜狐体育 cctv</strong></td>
        </tr>
        <tr>
            <td align=middle colSpan=4><strong>11月</strong></td>
        </tr>
        <tr>
            <td align=middle>1日 周四</td>
            <td>07:00am<a href="http://china.nba.com/bucks/" target=_blank></a></td>
            <td>雄鹿 @ 魔术</td>
            <td>黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td>3日 周六</td>
            <td>08:00am</td>
            <td>奇才 @ 凯尔特人</td>
            <td>CCTV5 </td>
        </tr>
        <tr>
            <td>4日 周日</td>
            <td>08:30am</td>
            <td>开拓者 @ 火箭</td>
            <td>江西/湖南经视/石家庄/辽宁/广西/昆明/新疆/黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td align=middle>7日&nbsp; 周三</td>
            <td align=middle>9:30</td>
            <td align=middle>马刺vs火箭</td>
            <td><strong>搜狐体育</strong></td>
        </tr>
        <tr>
            <td>8日 周四</td>
            <td>08:30am</td>
            <td>掘金 @ 凯尔特人</td>
            <td>黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td>10日 周六</td>
            <td>09:30am</td>
            <td>雄鹿 @ 火箭</td>
            <td>CCTV5 </td>
        </tr>
        <tr>
            <td>11日 周日</td>
            <td>08:00am</td>
            <td>太阳 @ 魔术</td>
            <td>江西/湖南经视/石家庄/辽宁/广西/昆明/新疆/黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td align=middle>14日 周三</td>
            <td align=middle>9:00</td>
            <td align=middle>火箭vs灰熊</td>
            <td><strong>搜狐体育</strong></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>09:30am</td>
            <td>湖人 @ 马刺</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>15日 周四</td>
            <td>10:00am</td>
            <td>湖人 @ 火箭</td>
            <td>黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td>17日 周六</td>
            <td>09:00am</td>
            <td>火箭 @ 马刺</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>18日 周日</td>
            <td>09:30am</td>
            <td>太阳 @ 火箭</td>
            <td>江西/湖南经视/石家庄/辽宁/广西/昆明/新疆/黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td>18日 周日</td>
            <td>08:30am</td>
            <td>热火 @ 网</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>20日 周二</td>
            <td>09:00am</td>
            <td>超音速 @ 灰熊</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>21日 周三</td>
            <td>10:00am</td>
            <td>公牛 @ 掘金</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td align=middle>21日 周三</td>
            <td align=middle>8:00</td>
            <td align=middle>雄鹿vs骑士</td>
            <td><strong>搜狐体育</strong></td>
        </tr>
        <tr>
            <td>22日 周四</td>
            <td>09:00am</td>
            <td>湖人 @ 雄鹿</td>
            <td>黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td>24日 周六</td>
            <td>09:00am</td>
            <td>火箭 @ 热火</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>25日 周日</td>
            <td>08:00am</td>
            <td>热火 @ 魔术</td>
            <td>江西/湖南经视/石家庄/辽宁/广西/昆明/新疆/黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td>25日 周日</td>
            <td>10:00am</td>
            <td>小牛 @ 雄鹿</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>27日 周二</td>
            <td>11:30am</td>
            <td>太阳 @ 勇士</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>28日 周三</td>
            <td>08:00am</td>
            <td>凯尔特人 @ 骑士</td>
            <td>CCTV5</td>
        </tr>
        <tr>
            <td>29日 周四</td>
            <td>10:00am</td>
            <td>火箭 @ 太阳</td>
            <td>黑龙江/陕西/上海/广东/福建/湖北/山东/浙江</td>
        </tr>
        <tr>
            <td align=middle>30日 周五</td>
            <td align=middle>11:30</td>
            <td align=middle>火箭vs勇士</td>
            <td><strong>搜狐体育</strong></td>
        </tr>
        <tr>
            <td align=middle colSpan=4><strong>12月</strong></td>
        </tr>
        <tr>
            <td>1日 周六</td>
            <td>08:30am</td>
            <td>雄鹿 @ 尼克斯</td>
            <td>CCTV5</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/35580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-10-30 12:14 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/10/30/35580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BMP文件格式</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/10/26/35400.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 26 Oct 2007 07:03:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/10/26/35400.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/35400.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/10/26/35400.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/35400.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/35400.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/dl_hum/archive/2006/04/24/675301.aspx"><img height=13 src="http://blog.csdn.net/images/zhuan.gif" width=15 border=0>&nbsp;BMP文件格式</a>&nbsp;&nbsp;
<script src="http://blog.csdn.net/count.aspx?ID=675301&amp;Type=Rank"></script>
<span title=文章指数:95><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star_half.gif" border=0></span>&nbsp;&nbsp;<img title="CSDN Blog推出文章指数概念，文章指数是对Blog文章综合评分后推算出的，综合评分项分别是该文章的点击量，回复次数，被网摘收录数量，文章长度和文章类型；满分100，每月更新一次。" alt="CSDN Blog推出文章指数概念，文章指数是对Blog文章综合评分后推算出的，综合评分项分别是该文章的点击量，回复次数，被网摘收录数量，文章长度和文章类型；满分100，每月更新一次。" src="http://blog.csdn.net/images/ask.gif" border=0>
<div class=postText>
<p><strong><font color=#ff0000>1. 简介</font></strong></p>
<dir></dir><font lang=ZH-CN face=宋体>
<p>位图文件(<strong>B</strong>it<strong>m</strong>a<strong>p</strong>-File，BMP)格式是Windows采用的图像文件存储格式，在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP位图文件格式与显示设备有关，因此把它称为设备相关位图(<strong>d</strong>evice-<strong>d</strong>ependent <strong>b</strong>itmap，DDB)文件格式。Windows 3.0以后的BMP位图文件格式与显示设备无关，因此把这种BMP位图文件格式称为设备无关位图(<strong>d</strong>evice-<strong>i</strong>ndependent <strong>b</strong>itmap，DIB)格式，目的是为了让Windows能够在任何类型的显示设备上显示BMP位图文件。BMP位图文件默认的文件扩展名是BMP或者bmp。</p>
<p>&nbsp;</p>
</font><font lang=ZH-CN face=宋体 color=#ff0000><strong>2 文件结构</strong></font><font lang=ZH-CN face=宋体><strong> </strong>
<p>位图文件可看成由4个部分组成：位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列，它们的名称和符号如表6-01所示。</p>
<dir>
<p align=center><strong>表6-01 BMP图像文件组成部分的名称和符号</strong></p>
</dir></font>
<p align=center><strong>&nbsp;</strong></p>
<center>
<table borderColor=#000000 cellSpacing=2 cellPadding=1 width=490 border=1>
    <tbody>
        <tr>
            <td vAlign=top width="54%"><font lang=ZH-CN face=宋体>
            <p align=center><strong>位图文件的组成</strong></p>
            </font></td>
            <td vAlign=top width="25%"><font lang=ZH-CN face=宋体>
            <p align=center><strong>结构名称</strong></p>
            </font></td>
            <td vAlign=top width="21%"><font lang=ZH-CN face=宋体>
            <p align=center><strong>符号</strong></p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="54%"><font lang=ZH-CN face=宋体>
            <p>位图文件头(bitmap-file header)</p>
            </font></td>
            <td vAlign=top width="25%"><font lang=ZH-CN face=宋体>
            <p>BITMAPFILEHEADER</p>
            </font></td>
            <td vAlign=top width="21%"><font lang=ZH-CN face=宋体>
            <p>bmfh</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="54%"><font lang=ZH-CN face=宋体>
            <p>位图信息头(bitmap-information header)</p>
            </font></td>
            <td vAlign=top width="25%"><font lang=ZH-CN face=宋体>
            <p>BITMAPINFOHEADER</p>
            </font></td>
            <td vAlign=top width="21%"><font lang=ZH-CN face=宋体>
            <p>bmih</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="54%"><font lang=ZH-CN face=宋体>
            <p>彩色表(color table)</p>
            </font></td>
            <td vAlign=top width="25%"><font lang=ZH-CN face=宋体>
            <p>RGBQUAD</p>
            </font></td>
            <td vAlign=top width="21%"><font lang=ZH-CN face=宋体>
            <p>aColors[]</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="54%"><font lang=ZH-CN face=宋体>
            <p>图像数据阵列字节</p>
            </font></td>
            <td vAlign=top width="25%"><font lang=ZH-CN face=宋体>
            <p>BYTE</p>
            </font></td>
            <td vAlign=top width="21%"><font lang=ZH-CN face=宋体>
            <p>aBitmapBits[]</p>
            </font></td>
        </tr>
    </tbody>
</table>
</center>
<p><strong>&nbsp;</strong></p>
<font lang=ZH-CN face=宋体>
<p>位图文件结构可综合在表6-02中。</p>
<dir>
<p align=center><strong>表6-02 位图文件结构内容摘要</strong></p>
</dir></font>
<p align=center><strong>&nbsp;</strong></p>
<center>
<table borderColor=#000000 cellSpacing=2 cellPadding=7 width=568 border=1>
    <tbody>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p align=center>偏移量</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p align=center>域的名称</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p align=center>大小</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p align=center>内容</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%"><font lang=ZH-CN face=宋体>
            <p>　</p>
            <p>　</p>
            <p>　</p>
            <p>图像文件</p>
            <p>头</p>
            </font></td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0000h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>标识符(Identifier)</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>2 bytes</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>两字节的内容用来识别位图的类型：</p>
            </font>
            <p>&#8216;<font lang=ZH-CN face=宋体>BM</font>&#8217;<font lang=ZH-CN face=宋体> ： Windows 3.1x, 95, NT, </font>&#8230;</p>
            <p>&#8216;<font lang=ZH-CN face=宋体>BA</font>&#8217;<font lang=ZH-CN face=宋体> ：OS/2 Bitmap Array</font> </p>
            <p>&#8216;<font lang=ZH-CN face=宋体>CI</font>&#8217;<font lang=ZH-CN face=宋体> ：OS/2 Color Icon</font> </p>
            <p>&#8216;<font lang=ZH-CN face=宋体>CP</font>&#8217;<font lang=ZH-CN face=宋体> ：OS/2 Color Pointer</font> </p>
            <p>&#8216;<font lang=ZH-CN face=宋体>IC</font>&#8217;<font lang=ZH-CN face=宋体> ： OS/2 Icon</font> </p>
            <p>&#8216;<font lang=ZH-CN face=宋体>PT</font>&#8217;<font lang=ZH-CN face=宋体> ：OS/2 Pointer</font></p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0002h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>File Size</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>用字节表示的整个文件的大小</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0006h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Reserved</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>保留，设置为0</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>000Ah</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Bitmap Data Offset</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>从文件开始到位图数据开始之间的数据(bitmap data)之间的偏移量</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>000Eh</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Bitmap Header Size</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>位图信息头(Bitmap Info Header)的长度，用来描述位图的颜色、压缩方法等。下面的长度表示：</p>
            <p>28h - Windows 3.1x, 95, NT, </p>
            <font lang=ZH-CN face=宋体>
            <p>0Ch - OS/2 1.x</p>
            <p>F0h - OS/2 2.x</p>
            </font></font><font face="宋体, MS Song">&#8230;</font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0012h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Width</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>位图的宽度，以像素为单位</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0016h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Height</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>位图的高度，以像素为单位</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>001Ah</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Planes</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 word</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>位图的位面数</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%"><font lang=ZH-CN face=宋体>
            <p><br>图像</p>
            <p>信息</p>
            <p>头</p>
            <p>　</p>
            <p>　</p>
            </font></td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>001Ch</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Bits Per Pixel</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 word</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>每个像素的位数</p>
            <p>1 - Monochrome bitmap</p>
            <p>4 - 16 color bitmap</p>
            <p>8 - 256 color bitmap</p>
            <p>16 - 16bit (high color) bitmap</p>
            <p>24 - 24bit (true color) bitmap</p>
            <p>32 - 32bit (true color) bitmap</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>001Eh</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Compression</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>压缩说明：</p>
            <p>0 - none (也使用BI_RGB表示)</p>
            <p>1 - RLE 8-bit / pixel (也使用BI_RLE4表示)</p>
            <p>2 - RLE 4-bit / pixel (也使用BI_RLE8表示)</p>
            <p>3 - Bitfields (也使用BI_BITFIELDS表示)</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0022h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Bitmap Data Size</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>用字节数表示的位图数据的大小。该数必须是4的倍数</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0026h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>HResolution</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>用像素/米表示的水平分辨率</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>002Ah</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>VResolution</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>用像素/米表示的垂直分辨率</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>002Eh</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Colors</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>位图使用的颜色数。如8-位/像素表示为100h或者 256.</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%">　</td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0032h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Important Colors</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>1 dword</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>指定重要的颜色数。当该域的值等于颜色数时，表示所有颜色都一样重要</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%"><font lang=ZH-CN face=宋体>
            <p>调色板数据</p>
            </font></td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0036h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Palette</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>N * 4 byte</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>调色板规范。对于调色板中的每个表项，这4个字节用下述方法来描述RGB的值：</p>
            <ul>
                <li>1字节用于蓝色分量
                <li>1字节用于绿色分量
                <li>1字节用于红色分量
                <li>1字节用于填充符(设置为0) </li>
            </ul>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="8%"><font lang=ZH-CN face=宋体>
            <p>图像数据</p>
            </font></td>
            <td vAlign=top width="10%"><font lang=ZH-CN face=宋体>
            <p>0436h</p>
            </font></td>
            <td vAlign=top width="16%"><font lang=ZH-CN face=宋体>
            <p>Bitmap Data</p>
            </font></td>
            <td vAlign=top width="11%"><font lang=ZH-CN face=宋体>
            <p>x bytes</p>
            </font></td>
            <td vAlign=top width="55%"><font lang=ZH-CN face=宋体>
            <p>该域的大小取决于压缩方法，它包含所有的位图数据字节，这些数据实际就是彩色调色板的索引号</p>
            </font></td>
        </tr>
    </tbody>
</table>
</center>
<p><strong>&nbsp;</strong></p>
<font lang=ZH-CN face=宋体>
<p><strong>　</strong></p>
<p><strong>&nbsp;</strong></p>
</font><font lang=ZH-CN face=宋体 color=#ff0000><strong>3 构件详解</strong></font><font lang=ZH-CN face=宋体 color=#800080><strong> </strong>
<p><strong>1. 位图文件头</strong></p>
</font><font lang=ZH-CN face=宋体>
<p>位图文件头包含有关于文件类型、文件大小、存放位置等信息，在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义：</p>
<p>typedef struct tagBITMAPFILEHEADER { /* bmfh */</p>
<p>UINT bfType;</p>
<p>DWORD bfSize;</p>
<p>UINT bfReserved1;</p>
<p>UINT bfReserved2;</p>
<p>DWORD bfOffBits;</p>
<p>} BITMAPFILEHEADER;</p>
<p>其中：</p>
<p><strong>&nbsp;</strong></p>
<p><strong>　</strong></p>
</font>
<table cellSpacing=0 cellPadding=1 width=557 border=0>
    <tbody>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bfType</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明文件的类型. </p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bfSize</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明文件的大小，用字节为单位</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bfReserved1</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>保留，设置为0</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bfReserved2</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>保留，设置为0</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bfOffBits</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字 节偏移量</p>
            </font></dir></td>
        </tr>
    </tbody>
</table>
<font lang=ZH-CN face=宋体></font><font lang=ZH-CN face=宋体 color=#800080>
<p>2. 位图信息头</p>
</font><font lang=ZH-CN face=宋体>
<p>位图信息用BITMAPINFO结构来定义，它由位图信息头(bitmap-information header)和彩色表(color table)组成，前者用BITMAPINFOHEADER结构定义，后者用RGBQUAD结构定义。BITMAPINFO结构具有如下形式：</p>
<p>typedef struct tagBITMAPINFO { /* bmi */</p>
<p>BITMAPINFOHEADER bmiHeader;</p>
<p>RGBQUAD bmiColors[1];</p>
<p>} BITMAPINFO;</p>
<p>其中：</p>
<p>&nbsp;</p>
<p>BITMAPINFOHEADER结构包含有位图文件的大小、压缩类型和颜色格式，其结构定义为：</p>
<p>typedef struct tagBITMAPINFOHEADER { /* bmih */</p>
<p>DWORD biSize;</p>
<p>LONG biWidth;</p>
<p>LONG biHeight;</p>
<p>WORD biPlanes;</p>
<p>WORD biBitCount;</p>
<p>DWORD biCompression;</p>
<p>DWORD biSizeImage;</p>
<p>LONG biXPelsPerMeter;</p>
<p>LONG biYPelsPerMeter;</p>
<p>DWORD biClrUsed;</p>
<p>DWORD biClrImportant;</p>
<p>} BITMAPINFOHEADER;</p>
<p>其中：</p>
<p>&nbsp;</p>
<p>现就BITMAPINFOHEADER结构作如下说明：(1) 彩色表的定位</p>
<p>应用程序可使用存储在biSize成员中的信息来查找在BITMAPINFO结构中的彩色表，如下所示：</p>
<p>pColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo-&gt;bmiHeader.biSize))(2) biBitCount</p>
<p>biBitCount=1 biBitCount=4 biBitCount=8 biBitCount=24 (3) ClrUsed</p>
<p>BITMAPINFOHEADER结构中的成员ClrUsed指定实际使用的颜色数目。如果ClrUsed设置成0，位图使用的颜色数目就等于biBitCount成员中的数目。(4) 图像数据压缩</p>
<p>① BI_RLE8：编码方式</p>
<ul>
    <li>第二个字节的值为0：行的结束。
    <li>第二个字节的值为1：图像结束。
    <li>第二个字节的值为2：其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。 </li>
</ul>
<p>绝对方式[例6.1] </p>
<p>03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01<br>这些压缩数据可解释为 ：</p>
用十六进制表示的8位压缩图像数据如下：：第一个字节设置为0，而第二个字节设置为0x03～0xFF之间的一个值。在这种方式中，第二个字节表示跟在这个字节后面的字节数，每个字节包含单个像素的颜色索引。压缩数据格式需要字边界(word boundary)对齐。：由2个字节组成，第一个字节指定使用相同颜色的像素数目，第二个字节指定使用的颜色索引。此外，这个字节对中的第一个字节可设置为0，联合使用第二个字节的值表示：每个像素为8位的RLE压缩编码，可使用编码方式和绝对方式中的任何一种进行压缩，这两种方式可在同一幅图中的任何地方使用。表示位图最多有2<sup>24</sup>＝16 777 216种颜色。bmiColors (或者bmciColors)成员就为NULL。每3个字节代表一个像素，其颜色有R、G、B字节的相对强度决定。表示位图最多有256种颜色。每个像素用8位表示，并用这8位作为彩色表的表项来查找该像素的颜色。例如，如果位图中的第一个字节为0x1F，这个像素的颜色就在彩色表的第32表项中查找。表示位图最多有16种颜色。每个像素用4位表示，并用这4位作为彩色表的表项来查找该像素的颜色。例如，如果位图中的第一个字节为0x1F，它表示有两个像素，第一像素的颜色就在彩色表的第2表项中查找，而第二个像素的颜色就在彩色表的第16表项中查找。表示位图最多有两种颜色，黑色和白色。图像数据阵列中的每一位表示一个像素。</font><font face="宋体, MS Song"> </font>
<table cellSpacing=0 cellPadding=1 width=557 border=0>
    <tbody>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bmiHeader</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明BITMAPINFOHEADER结构</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>bmiColors</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明彩色表RGBQUAD结构的阵列</p>
            </font></dir></td>
        </tr>
    </tbody>
</table>
<font lang=ZH-CN face=宋体></font>
<table cellSpacing=0 cellPadding=1 width=557 border=0>
    <tbody>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biSize</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明BITMAPINFOHEADER结构所需要的字节数</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biWidth</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明图像的宽度，以像素为单位</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biHeight</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明图像的高度，以像素为单位</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biPlanes</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <dir><font lang=ZH-CN face=宋体>
            <p>为目标设备说明位面数，其值设置为1</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biBitCount</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明位数/像素，其值为1、2、4或者24</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biCompression</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <ul><font lang=ZH-CN face=宋体>
                <li>说明图像数据压缩的类型。其值可以是下述值之一：<br>BI_RGB：没有压缩；
                <li>BI_RLE8：每个像素8位的RLE压缩编码，压缩格式由2字节组成(重复像素计数和颜色索引)；
                <li>BI_RLE4：每个像素4位的RLE压缩编码，压缩格式由2字节组成 </font></li>
            </ul>
            </td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biSizeImage</p>
            </font></dir></td>
            <td vAlign=top width="77%"><font lang=ZH-CN face=宋体>
            <p>说明图像的大小，以字节为单位。当用BI_RGB格式时，可设置为0</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biXPelsPerMeter</p>
            </font></dir></td>
            <td vAlign=top width="77%"><font lang=ZH-CN face=宋体>
            <p>说明水平分辨率，用像素/米表示</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biYPelsPerMeter</p>
            </font></dir></td>
            <td vAlign=top width="77%"><font lang=ZH-CN face=宋体>
            <p>说明垂直分辨率，用像素/米表示</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biClrUsed</p>
            </font></dir></td>
            <td vAlign=top width="77%"><font lang=ZH-CN face=宋体>
            <p>说明位图实际使用的彩色表中的颜色索引数</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="23%">
            <dir><font lang=ZH-CN face=宋体>
            <p>biClrImportant</p>
            </font></dir></td>
            <td vAlign=top width="77%">
            <dir><font lang=ZH-CN face=宋体>
            <p>说明对图像显示有重要影响的颜色索引的数目，如果是0，表示都重要。</p>
            </font></dir></td>
        </tr>
    </tbody>
</table>
<font lang=ZH-CN face=宋体></font>
<p align=center>&nbsp;</p>
<center>
<table borderColor=#000000 cellSpacing=2 cellPadding=1 width=352 border=1>
    <tbody>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p align=center>压缩数据 </p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p align=center>扩展数据</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>03 04</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>04 04 04 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>05 06</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>06 06 06 06 06 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 03 45 56 67 00</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>45 56 67 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>02 78</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>78 78 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 02 05 01</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>从当前位置右移5个位置后向下移一行</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>02 78</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>78 78 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 00</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>行结束</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>09 1E</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>1E 1E 1E 1E 1E 1E 1E 1E 1E </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 01</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>RLE编码图像结束 </p>
            </font></td>
        </tr>
    </tbody>
</table>
</center>
<p>&nbsp;</p>
<font lang=ZH-CN face=宋体>
<p>② BI_RLE4：</p>
<p>编码方式：由2个字节组成，第一个字节指定像素数目，第二个字节包含两种颜色索引，一个在高4位，另一个在低4位。第一个像素使用高4位的颜色索引，第二个使用低4位的颜色索引，第3个使用高4位的颜色索引，依此类推。</p>
<p>绝对方式：这个字节对中的第一个字节设置为0，第二个字节包含有颜色索引数，其后续字节包含有颜色索引，颜色索引存放在该字节的高、低4位中，一个颜色索引对应一个像素。此外，BI_RLE4也同样联合使用第二个字节中的值表示：</p>
<ul>
    <li>第二个字节的值为0：行的结束。
    <li>第二个字节的值为1：图像结束。
    <li>第二个字节的值为2：其后的两个字节表示下一个像素从当前开始的水平和垂直位置的偏移量。 </li>
</ul>
<p>[例6.2] </p>
<p>03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01</p>
<p>这些压缩数据可解释为 ：</p>
用十六进制数表示的4位压缩图像数据：每个像素为4位的RLE压缩编码，同样也可使用编码方式和绝对方式中的任何一种进行压缩，这两种方式也可在同一幅图中的任何地方使用。这两种方式是：</font><font face="宋体, MS Song"> </font>
<p align=center>&nbsp;</p>
<center>
<table borderColor=#000000 cellSpacing=2 cellPadding=1 width=352 border=1>
    <tbody>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p align=center>压缩数据</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p align=center>扩展数据</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>03 04</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>0 4 0</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>05 06</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>0 6 0 6 0 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 06 45 56 67 00</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>4 5 5 6 6 7 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>04 78</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>7 8 7 8 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 02 05 01</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>从当前位置右移5个位置后向下移一行</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>04 78</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>7 8 7 8 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 00</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>行结束</p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>09 1E</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>1 E 1 E 1 E 1 E 1 </p>
            </font></td>
        </tr>
        <tr>
            <td vAlign=top width="32%"><font lang=ZH-CN face=宋体>
            <p>00 01</p>
            </font></td>
            <td vAlign=top width="68%"><font lang=ZH-CN face=宋体>
            <p>RLE图像结束 </p>
            </font></td>
        </tr>
    </tbody>
</table>
</center>
<p>&nbsp;</p>
<font lang=ZH-CN face=宋体>
<p>　</p>
</font><font lang=ZH-CN face=宋体 color=#800080>
<p>3. 彩色表</p>
</font><font lang=ZH-CN face=宋体>
<p>彩色表包含的元素与位图所具有的颜色数相同，像素的颜色用RGBQUAD结构来定义。对于24-位真彩色图像就不使用彩色表，因为位图中的RGB值就代表了每个像素的颜色。彩色表中的颜色按颜色的重要性排序，这可以辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像。RGBQUAD结构描述由R、G、B相对强度组成的颜色，定义如下：</p>
<p>typedef struct tagRGBQUAD { /* rgbq */</p>
<p>BYTE rgbBlue;</p>
<p>BYTE rgbGreen;</p>
<p>BYTE rgbRed;</p>
<p>BYTE rgbReserved;</p>
<p>} RGBQUAD;</p>
<p>其中：</p>
<p>&nbsp;</p>
<p>　</p>
</font>
<table cellSpacing=0 cellPadding=1 width=557 border=0>
    <tbody>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>rgbBlue</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>指定蓝色强度</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>rgbGreen</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>指定绿色强度</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>rgbRed</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>指定红色强度</p>
            </font></dir></td>
        </tr>
        <tr>
            <td vAlign=top width="22%">
            <dir><font lang=ZH-CN face=宋体>
            <p>rgbReserved</p>
            </font></dir></td>
            <td vAlign=top width="78%">
            <dir><font lang=ZH-CN face=宋体>
            <p>保留，设置为0</p>
            </font></dir></td>
        </tr>
    </tbody>
</table>
<font lang=ZH-CN face=宋体></font><font lang=ZH-CN face=宋体 color=#800080>
<p>4. 位图数据</p>
</font><font lang=ZH-CN face=宋体>
<p>紧跟在彩色表之后的是图像数据字节阵列。图像的每一扫描行由表示图像像素的连续的字节组成，每一行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底向上存储的，这就是说，阵列中的第一个字节表示位图左下角的像素，而最后一个字节表示位图右上角的像素</p>
</font><br><br>
<p id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=675301</p>
</div>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/35400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-10-26 15:03 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/10/26/35400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于加州大火</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/10/25/35311.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 25 Oct 2007 04:21:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/10/25/35311.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/35311.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/10/25/35311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/35311.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/35311.html</trackback:ping><description><![CDATA[为什么不用草原割草止火的办法，用砍树的办法阻止森林大火呢？<br>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/35311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-10-25 12:21 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/10/25/35311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cable Modem工作原理</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/07/26/30740.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 26 Jul 2007 09:28:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/07/26/30740.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/30740.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/07/26/30740.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/30740.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/30740.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; CATV网利用Cable Modem（简称CM）来向用户提供高速宽带Iternet接入，这种接入<br><font class=37>方式给用户提供最高达38Mbps的接入速度，那末CM是如何工作的，是如何与CATV前端建<br></font><font class=37>立联系的，在这里我作一些介绍。<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM系统是基于DOCSIS1.1标准来设计的，系统由前端设备CMTS和用户端设备CM组成。<br></font><font class=37>CMTS是作为前端路由器、交换集线器与CATV网络之间的连接设备，CM通过CMTS与广域网<br></font><font class=37>（Iternet)实现连接。CMTS也是管理和控制CM的设备，它的主要配置有：下行频率、下<br></font><font class=37>行调制方式、下行电平、DHCP和TFTP与TOD服务器等。其中DHCP服务器用作动态分配给每<br></font><font class=37>个CM的IP地址，TFTP服务器作用是记录着每一个CM的配置文件，也即给每个CM分配一个<br></font><font class=37>服务标识（Servite ID)，服务标识在CMTS与CM之间建立一个映射，CMTS将基于该映射给<br></font><font class=37>没个CM分配带宽。CMTS也可给CM分配多个服务标识来支持不同服务类型，每个服务标识<br></font><font class=37>对应于服务类型，TOD称为时间服务器，其作用是给CM提供当前的时间。这三个服务器可<br></font><font class=37>安装在同一台物理服务器上。CMTS能维护一个连接用户数据交换集线器的10Baset双向接<br></font><font class=37>口和一个承载简单网络管理协议（SNMP）信息的10Baset接口，并且CMTS能支持CATV网络<br></font><font class=37>上的不同CM之间的双向通讯。就下行来说，由路由器的数据包在CMTS中被封装成MPEG2-<br></font><font class=37>TS幀的形式经过64QAM调制后，通过HFC网传给各CM。在上行方向上，CMTS将接收到的经<br></font><font class=37>QPSK调制的数据进行解调并转换成以太幀的形式传给路由器。为了减小上行通道的干扰<br></font><font class=37>，一个下行通道一般对应有多个不同频率的上行通道，CMTS根据信道的噪声状况自动跳<br></font><font class=37>频到干扰较小的通道，而用户察觉不到跳频的过程。同时，CMTS负责处理不同的媒体访<br></font><font class=37>问控制(对访问用户的IP地址进行受权认正），这些程序包括下行的时隙信息传输，测距<br></font><font class=37>管理以及给各CM分配时分多址访问的时隙。CMTS根据带宽分配算法可将一个小时隙定义<br></font><font class=37>为预约小时隙或竞争小时隙，CM通过小时隙向CMTS传输数据。<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM是放在用户家中的终端设备，连接用户的PC机和HFC网络，提供用户数据接入。C<br></font><font class=37>M与CMTS组成完整的数据通信系统，CM接收从CMTS发送来的QAM调制信号并解调，然后转<br></font><font class=37>换成MPEG2-TS数据幀的形式，以重建传向10Baset以太接口的以太幀。在相反的方向上从<br></font><font class=37>PC机接收到的以太幀被封装在时隙中，经QPSK调制后，通过HFC网络的上行数据通路传送<br></font><font class=37>给CMTS。<br></font><font class=37>CM在加电之后，必须进行初始化，才能进入网络，接收CMTS发送的数据及向CMTS传输数<br></font><font class=37>据。CM的初始化是经过与CMTS的一系列交互过程来实现的。下面详细描述该过程。<br></font><font class=37>1、测试RSM<br></font><font class=37>&nbsp;&nbsp;&nbsp; 当CM接通电源后，CM首先要确认可移去的安全模块，是否存在于RSM的时隙中。<br></font><font class=37>2、与CMTS建立同步<br></font><font class=37>&nbsp;&nbsp;&nbsp; 在初始化或信息丢失时，CM必须与一个下行信道建立同步。CM有一个存储器，其中<br></font><font class=37>存放上次的操作参数，CM将首先尝试重新获得存储的那个下行信道，如果尝试失败，CM<br></font><font class=37>将连续地对下行信道进行扫描，直到发现一个有效的下行信号。CM与下行信号同步的标<br></font><font class=37>准为：与QAM码元定时同步、与FEC幀同步、与MPEG分组同步并能识别下行媒体访问控制<br></font><font class=37>的同步报文。<br></font><font class=37>3、获得上行信道的传输参数<br></font><font class=37>&nbsp;&nbsp;&nbsp; 建立同步之后，CM必须等待一个从CMTS发送出来的上行信道描述符，以获得上行信<br></font><font class=37>道的传输参数。CMTS周期性地传输上行信道描述符给所有的CM，CM必须从其中的信道描<br></font><font class=37>述参数中确定它是否使用该上行信道。若该信道不合适。那么CM必须等待，直到有一个<br></font><font class=37>信道描述符指定的信道适合于它，若在一定时间内没找到这样的上行信道，那么CM必须<br></font><font class=37>继续扫描。找到另一个下行信道，再重复该过程。在找到一个上行信道后。CM必须从信<br></font><font class=37>道描述符中取出参数，然后等待下一个同步报文，并从该报文中取出上行小时隙的时间<br></font><font class=37>标记，随后，CM等待一个给所选择的信道的带宽分配映射，然后它可以按照媒体访问控<br></font><font class=37>制操作和带宽分配机制在上行信道中传输信息。<br></font><font class=37>4、校准<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM在获得上行信道的传输参数后，就可以与CMTS进行通讯。CMTS会在MAP中给该CM分<br></font><font class=37>配一个初始维护的传输机会，用于调整CM传输信号的电平、频率等参数，其中CM的输出<br></font><font class=37>电平是根据分配给CM的带宽，按每赫之功率为参数，通过CMTS对CM的长线AGC来控制的。<br></font><font class=37>另外，CMTS还会周期性地给各个CM发周期维护报文，用于对CM进行周期性的校准。<br></font><font class=37>5、建立IP连接<br></font><font class=37>&nbsp;&nbsp;&nbsp; 校准完成后，CM必须使用动态主机配置协议（DHCP），从DHCP服务器上获得分配给<br></font><font class=37>它的IP地址，另外，DHCP服务器的响应中还必须包括一个包含配置参数文件的文件名，<br></font><font class=37>放置这些文件的TFTP服务器的IP地址、时间服务器的IP地址等信息。<br></font><font class=37>6、建立时间<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM和CMTS需要有当前的日期和时间。CM采用IETF定义的RFC868协议从时间服务器中<br></font><font class=37>获得当前的日期和时间。RFC868定义了获得时间的两种方式，一种是面向连接的，一种<br></font><font class=37>是面向无连接的。CMTS采用面向无连接的方式从TOD服务器获得CM所需的时间概念。<br></font><font class=37>7、建立安全机制<br></font><font class=37>&nbsp;&nbsp;&nbsp; 如果有RSM模块存在，并且没有安全协定建立，那么CM必须与安全服务器建立安全协<br></font><font class=37>定。安全服务器的IP地址可以从DHCP服务器的响应中获得。<br></font><font class=37>8、传输操作参数<br></font><font class=37>&nbsp;&nbsp;&nbsp; 接下来，CM必须使用TFTP协议从TFTP服务器上下载配置参数文件，获得所需要的各<br></font><font class=37>种参数。<br></font><font class=37>9、初始化基本保密机制<br></font><font class=37>&nbsp;&nbsp;&nbsp; 在获得配置参数后，若RSM模块没有检测到，CM将初始化基本保密机制。完成初始化<br></font><font class=37>后，CM将使用下载的配置参数向CMTS申请注册，当CM接收到CMTS发出的注册响应后，CM<br></font><font class=37>就进入了正常的工作状态。思维稿<br></font><font class=37><br></font><font class=37><br>&nbsp;&nbsp;&nbsp; CATV网利用Cable Modem（简称CM）来向用户提供高速宽带Iternet接入，这种接入<br><font class=37>方式给用户提供最高达38Mbps的接入速度，那末CM是如何工作的，是如何与CATV前端建<br></font><font class=37>立联系的，在这里我作一些介绍。<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM系统是基于DOCSIS1.1标准来设计的，系统由前端设备CMTS和用户端设备CM组成。<br></font><font class=37>CMTS是作为前端路由器、交换集线器与CATV网络之间的连接设备，CM通过CMTS与广域网<br></font><font class=37>（Iternet)实现连接。CMTS也是管理和控制CM的设备，它的主要配置有：下行频率、下<br></font><font class=37>行调制方式、下行电平、DHCP和TFTP与TOD服务器等。其中DHCP服务器用作动态分配给每<br></font><font class=37>个CM的IP地址，TFTP服务器作用是记录着每一个CM的配置文件，也即给每个CM分配一个<br></font><font class=37>服务标识（Servite ID)，服务标识在CMTS与CM之间建立一个映射，CMTS将基于该映射给<br></font><font class=37>没个CM分配带宽。CMTS也可给CM分配多个服务标识来支持不同服务类型，每个服务标识<br></font><font class=37>对应于服务类型，TOD称为时间服务器，其作用是给CM提供当前的时间。这三个服务器可<br></font><font class=37>安装在同一台物理服务器上。CMTS能维护一个连接用户数据交换集线器的10Baset双向接<br></font><font class=37>口和一个承载简单网络管理协议（SNMP）信息的10Baset接口，并且CMTS能支持CATV网络<br></font><font class=37>上的不同CM之间的双向通讯。就下行来说，由路由器的数据包在CMTS中被封装成MPEG2-<br></font><font class=37>TS幀的形式经过64QAM调制后，通过HFC网传给各CM。在上行方向上，CMTS将接收到的经<br></font><font class=37>QPSK调制的数据进行解调并转换成以太幀的形式传给路由器。为了减小上行通道的干扰<br></font><font class=37>，一个下行通道一般对应有多个不同频率的上行通道，CMTS根据信道的噪声状况自动跳<br></font><font class=37>频到干扰较小的通道，而用户察觉不到跳频的过程。同时，CMTS负责处理不同的媒体访<br></font><font class=37>问控制(对访问用户的IP地址进行受权认正），这些程序包括下行的时隙信息传输，测距<br></font><font class=37>管理以及给各CM分配时分多址访问的时隙。CMTS根据带宽分配算法可将一个小时隙定义<br></font><font class=37>为预约小时隙或竞争小时隙，CM通过小时隙向CMTS传输数据。<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM是放在用户家中的终端设备，连接用户的PC机和HFC网络，提供用户数据接入。C<br></font><font class=37>M与CMTS组成完整的数据通信系统，CM接收从CMTS发送来的QAM调制信号并解调，然后转<br></font><font class=37>换成MPEG2-TS数据幀的形式，以重建传向10Baset以太接口的以太幀。在相反的方向上从<br></font><font class=37>PC机接收到的以太幀被封装在时隙中，经QPSK调制后，通过HFC网络的上行数据通路传送<br></font><font class=37>给CMTS。<br></font><font class=37>CM在加电之后，必须进行初始化，才能进入网络，接收CMTS发送的数据及向CMTS传输数<br></font><font class=37>据。CM的初始化是经过与CMTS的一系列交互过程来实现的。下面详细描述该过程。<br></font><font class=37>1、测试RSM<br></font><font class=37>&nbsp;&nbsp;&nbsp; 当CM接通电源后，CM首先要确认可移去的安全模块，是否存在于RSM的时隙中。<br></font><font class=37>2、与CMTS建立同步<br></font><font class=37>&nbsp;&nbsp;&nbsp; 在初始化或信息丢失时，CM必须与一个下行信道建立同步。CM有一个存储器，其中<br></font><font class=37>存放上次的操作参数，CM将首先尝试重新获得存储的那个下行信道，如果尝试失败，CM<br></font><font class=37>将连续地对下行信道进行扫描，直到发现一个有效的下行信号。CM与下行信号同步的标<br></font><font class=37>准为：与QAM码元定时同步、与FEC幀同步、与MPEG分组同步并能识别下行媒体访问控制<br></font><font class=37>的同步报文。<br></font><font class=37>3、获得上行信道的传输参数<br></font><font class=37>&nbsp;&nbsp;&nbsp; 建立同步之后，CM必须等待一个从CMTS发送出来的上行信道描述符，以获得上行信<br></font><font class=37>道的传输参数。CMTS周期性地传输上行信道描述符给所有的CM，CM必须从其中的信道描<br></font><font class=37>述参数中确定它是否使用该上行信道。若该信道不合适。那么CM必须等待，直到有一个<br></font><font class=37>信道描述符指定的信道适合于它，若在一定时间内没找到这样的上行信道，那么CM必须<br></font><font class=37>继续扫描。找到另一个下行信道，再重复该过程。在找到一个上行信道后。CM必须从信<br></font><font class=37>道描述符中取出参数，然后等待下一个同步报文，并从该报文中取出上行小时隙的时间<br></font><font class=37>标记，随后，CM等待一个给所选择的信道的带宽分配映射，然后它可以按照媒体访问控<br></font><font class=37>制操作和带宽分配机制在上行信道中传输信息。<br></font><font class=37>4、校准<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM在获得上行信道的传输参数后，就可以与CMTS进行通讯。CMTS会在MAP中给该CM分<br></font><font class=37>配一个初始维护的传输机会，用于调整CM传输信号的电平、频率等参数，其中CM的输出<br></font><font class=37>电平是根据分配给CM的带宽，按每赫之功率为参数，通过CMTS对CM的长线AGC来控制的。<br></font><font class=37>另外，CMTS还会周期性地给各个CM发周期维护报文，用于对CM进行周期性的校准。<br></font><font class=37>5、建立IP连接<br></font><font class=37>&nbsp;&nbsp;&nbsp; 校准完成后，CM必须使用动态主机配置协议（DHCP），从DHCP服务器上获得分配给<br></font><font class=37>它的IP地址，另外，DHCP服务器的响应中还必须包括一个包含配置参数文件的文件名，<br></font><font class=37>放置这些文件的TFTP服务器的IP地址、时间服务器的IP地址等信息。<br></font><font class=37>6、建立时间<br></font><font class=37>&nbsp;&nbsp;&nbsp; CM和CMTS需要有当前的日期和时间。CM采用IETF定义的RFC868协议从时间服务器中<br></font><font class=37>获得当前的日期和时间。RFC868定义了获得时间的两种方式，一种是面向连接的，一种<br></font><font class=37>是面向无连接的。CMTS采用面向无连接的方式从TOD服务器获得CM所需的时间概念。<br></font><font class=37>7、建立安全机制<br></font><font class=37>&nbsp;&nbsp;&nbsp; 如果有RSM模块存在，并且没有安全协定建立，那么CM必须与安全服务器建立安全协<br></font><font class=37>定。安全服务器的IP地址可以从DHCP服务器的响应中获得。<br></font><font class=37>8、传输操作参数<br></font><font class=37>&nbsp;&nbsp;&nbsp; 接下来，CM必须使用TFTP协议从TFTP服务器上下载配置参数文件，获得所需要的各<br></font><font class=37>种参数。<br></font><font class=37>9、初始化基本保密机制<br></font><font class=37>&nbsp;&nbsp;&nbsp; 在获得配置参数后，若RSM模块没有检测到，CM将初始化基本保密机制。完成初始化<br></font><font class=37>后，CM将使用下载的配置参数向CMTS申请注册，当CM接收到CMTS发出的注册响应后，CM<br></font><font class=37>就进入了正常的工作状态。</font><font class=37><br></font><font class=37><br></font></font>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/30740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-07-26 17:28 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/07/26/30740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ftp登录问题</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/07/10/29695.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Tue, 10 Jul 2007 04:51:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/07/10/29695.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/29695.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/07/10/29695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/29695.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/29695.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过本机的域名登录，在发送user test命令后，就没有响应了。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/07/10/29695.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/29695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-07-10 12:51 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/07/10/29695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>租房</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/07/02/29337.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Mon, 02 Jul 2007 04:59:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/07/02/29337.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/29337.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/07/02/29337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/29337.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/29337.html</trackback:ping><description><![CDATA[我要租房，一房两房都行，1500以下，小区房。科技园5公里以内。<br>电话26782957。<br><br>,在2007-7-23以前。<br>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/29337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-07-02 12:59 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/07/02/29337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让FTP自动断线重传（断点续传）</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/06/17/28645.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sun, 17 Jun 2007 14:36:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/06/17/28645.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/28645.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/06/17/28645.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/28645.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/28645.html</trackback:ping><description><![CDATA[<p align=left><strong>让FTP自动断线重传（断点续传）</strong><br>原创：游子， 2007.6.17.&nbsp; <a href="http://www.cnitblog.com/liaoqingshan">http://www.cnitblog.com/liaoqingshan</a><br><br>方法一：在&#8220;站点管理器&#8221;中选择：&#8220;配置&#8221;<br><img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/set2.jpg" border=0><br>在&#8220;全局&#8221;选项卡中，做如下设置：<br><img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/set3.jpg" border=0><br>在&#8220;站点...&#8221;选项卡中，勾中&#8220;使用全局设置&#8221;：<br><img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/set4.jpg" border=0><br>&#8220;确定&#8221;保存后即可。<br><br>方法二：在出现&#8220;确认文件替换&#8221;对话框的时候，不要直接选择&#8220;续传&#8221;，而选择&#8220;设置&#8221;。<br>设置方法同上。以后都会按设置的处理。<br><img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/set.jpg" border=0></p>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/28645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-06-17 22:36 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/06/17/28645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何连接防火干墙内的SERV-U服务器？</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/06/11/28324.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Mon, 11 Jun 2007 07:32:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/06/11/28324.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/28324.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/06/11/28324.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/28324.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/28324.html</trackback:ping><description><![CDATA[<p>防火干墙内ftp服务器，通常无法使用被动模式（PASV)连接，所以在客户端要设置一下连接的网站。<br>举例：FTP站点：ftp://<a href="ftp://ftp.faqilai.com/" target=_blank>ftp.faqilai.com</a></p>
<br>
<p>下载及安装（省略）</p>
<p>使用步骤：</p>
<br>
<p>1、打开flashfxp，选择管理站点。</p>
<img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/1.jpg" border=0><br>
<p>&nbsp;2、建立站点。</p>
<img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/2.jpg" border=0><br>
<p>3、写入站点名称，IP，用户名，密码</p>
<img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/3.jpg" border=0><br>
<p>4、修改选项：去掉&#8220;使用被动模式&#8221;，勾中&#8220;站点不支持&#8216;FEAT&#8217;命令&#8221;。</p>
<img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/4.jpg" border=0><br>
<p>5、应用，连接，即可登录站点。<br>
<img src="http://www.cnitblog.com/images/cnitblog_com/liaoqingshan/5.jpg" border=0><br>&nbsp;6.通常，登录后，左边是你的电脑，右边是FTP站点，要下载文件，只要把文件从右边拖到左边。要上传文件，则把文件从左边拖到右边。</p><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/28324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-06-11 15:32 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/06/11/28324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SendRequest如何设置超时？</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/06/09/28278.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 09 Jun 2007 15:05:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/06/09/28278.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/28278.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/06/09/28278.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/28278.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/28278.html</trackback:ping><description><![CDATA[<p>我在HTTP编程时，遇到一个麻烦，执行OpenRequest很快就返回了，但执行SendRequest有时候到等几分钟，不知道系统在干什么？<br>在网上查了，用了SetOption设置超时也不管用，不知道有哪位遇到过这个问题？请多指教。<br>代码片断如下：<br><br>&nbsp;&nbsp;pHttpCnn = session.GetHttpConnection(m_server,0, m_port);<br>&nbsp;&nbsp;assert(pHttpCnn != NULL);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,10);&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT,10);&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,10);&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;pHttpFile = pHttpCnn-&gt;OpenRequest("GET", strGet);<br>&nbsp;&nbsp;assert(pHttpFile != NULL);</p>
<p>&nbsp;&nbsp;bool b = pHttpFile-&gt;SendRequest();<br></p>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/28278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-06-09 23:05 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/06/09/28278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>免路由+免双网卡之ADSL共享上网</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/05/20/adslShareNet.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sun, 20 May 2007 09:06:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/05/20/adslShareNet.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/27325.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/05/20/adslShareNet.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/27325.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/27325.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 两台电脑，分别只有一个网卡，一个HUB，一个ADSL，<br>的上网方案&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/05/20/adslShareNet.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/27325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2007-05-20 17:06 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/05/20/adslShareNet.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新发现一个FTP下载站点</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/05/02/26575.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 02 May 2007 07:24:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/05/02/26575.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/26575.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/05/02/26575.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/26575.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/26575.html</trackback:ping><description><![CDATA[新发现一个FTP下载站点，里面有许多电脑教程。<br>都是视频的，很实用，有软件的，硬件的，还有电脑保洁的视频教程。<br>网址是ftp.faqilai.com<