﻿<?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/category/2921.html</link><description>慈母手中线，游子身上衣，
临行密密缝，意恐迟迟归，
谁言寸草心，报得三春晖。


数据读取中，请稍候......</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 16:53:03 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 16:53:03 GMT</pubDate><ttl>60</ttl><item><title>NOR Flash 和 NAND Flash----转载</title><link>http://www.cnitblog.com/liaoqingshan/archive/2010/04/29/65704.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 29 Apr 2010 14:10:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2010/04/29/65704.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/65704.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2010/04/29/65704.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/65704.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/65704.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2010/04/29/65704.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/65704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2010-04-29 22:10 <a href="http://www.cnitblog.com/liaoqingshan/archive/2010/04/29/65704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CMMB的技术路线及主要系统参数和指标（转）</title><link>http://www.cnitblog.com/liaoqingshan/archive/2009/02/02/54122.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Mon, 02 Feb 2009 07:34:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2009/02/02/54122.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/54122.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2009/02/02/54122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/54122.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/54122.html</trackback:ping><description><![CDATA[<span>&nbsp;<span><font size=2>根据移动多媒体广播电视电视系统的技术体制、总体架构及体系结构，移动多媒体广播电视的技术路线为：<br>&nbsp;&nbsp;&nbsp; （1）采用卫星和地面网络相结合的方式实现&#8220;天地一体&#8221;协同覆盖，信道传输采用STiMi技术。<br>&nbsp;&nbsp;&nbsp; （2）全国节目通过S波段卫星对全国实现覆盖，卫星遮挡地区可采取地面同频增补方式，在城市人口密集区域采用U波段增补。<br>&nbsp;&nbsp;&nbsp; （3）地方节目采用U波段地面网络实现覆盖。<br>&nbsp;&nbsp;&nbsp; （4）电视业务视频压缩编码采用AVS、H.264/AVC，伴音压缩编码采用MPEG-4 HE AAC；广播业务音频压缩编码采用DRA。<br>&nbsp;&nbsp;&nbsp; （5）数据广播采用可扩展的多协议封装复用传输，支持流模式、文件模式传输。<br>&nbsp;&nbsp;&nbsp; （6）加密授权系统对音视频流和数据广播流采用ISMACryp进行加扰，系统前端支持同密，终端采用多密，系统支持单向、双向和基于电子钱包的授权管理方式。<br>&nbsp;&nbsp;&nbsp; （7）运营支撑系统原则上采用两级架构体系，对内容统一加密，统一管理，支持公共服务、基本服务和扩展服务，实现各类终端用户的合法注册。<br></font></span>
<p><font size=2><span>CMMB</span><span>主要系统参数和指标是移动多媒体广播电视系统建立过程中的基本要求。移动多媒体广播电视系统的主要系统参数和指标为：</span></font></p>
<p><strong><span><font size=3>（<span>1</span>）音视频编码</font></span></strong></p>
<p align=center><span>表<span>1 </span>音视频编码主要系统参数和指标</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <thead>
        <tr>
            <td width=157>
            <p align=center><span>名称</span></p>
            </td>
            <td width=300>
            <p align=center><span>主要指标<span>/</span>参数</span></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td width=157>
            <p align=center><span>视频广播业务</span></p>
            </td>
            <td width=300>
            <p><span>视频压缩标准：<span>AVS</span>，<span>H.264</span></span></p>
            <p><span>音频压缩标准：<span>MPEG-4 AAC</span></span></p>
            <p><span>帧率：<span>25</span>帧<span>/</span>秒</span></p>
            <p><span>图像分辨率：<span>QVGA</span>（<span>320x240</span>）、<span>QCIF(176x144)其它分辨率可选</span></span></p>
            <p><span>采样格式：<span>4:2:0 </span></span></p>
            </td>
        </tr>
        <tr>
            <td width=157>
            <p align=center><span>音频广播业务</span></p>
            </td>
            <td width=300>
            <p><span>音频压缩标准：<span>DRA</span></span></p>
            <p><span>音频声道：单声道、立体声</span></p>
            <p><span>采样率：<span>48kHz</span>、<span>44.1kHz</span>、<span>32kHz</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span><font size=3>&nbsp;</font></span></p>
<p><strong><span><font size=3>（<span>2</span>）信道传输</font></span></strong></p>
<p align=center><span>表<span>2 </span>信道传输主要系统参数和指标</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <thead>
        <tr>
            <td width=157>
            <p align=center><span>名称</span></p>
            </td>
            <td width=300>
            <p align=center><span>主要指标<span>/</span>参数</span></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td width=157>
            <p align=center><span>带宽</span></p>
            </td>
            <td width=300>
            <p align=left><span>卫星：<span>3</span>&#215;<span>8MHz</span></span></p>
            <p align=left><span>地面：<span>8MHz</span></span></p>
            </td>
        </tr>
        <tr>
            <td width=157>
            <p align=center><span>调制方式</span></p>
            </td>
            <td width=300>
            <p align=left><span>OFDM </span></p>
            </td>
        </tr>
        <tr>
            <td width=157>
            <p align=center><span>映射方式</span></p>
            </td>
            <td width=300>
            <p align=left><span>卫星：<span>BPSK</span>、<span>QPSK</span></span></p>
            <p align=left><span>地面：<span>BPSK</span>、<span>QPSK</span>、<span>16QAM</span></span></p>
            </td>
        </tr>
        <tr>
            <td width=157>
            <p align=center><span>编码方式</span></p>
            </td>
            <td width=300>
            <p align=left><span>外编码：<span>RS </span></span></p>
            <p align=left><span>内编码：<span>LDPC</span></span></p>
            </td>
        </tr>
        <tr>
            <td width=157>
            <p align=center><span>循环前缀</span></p>
            </td>
            <td width=300>
            <p align=left><span>51.2&#181;s</span></p>
            </td>
        </tr>
        <tr>
            <td width=157>
            <p align=center><span>系统净荷</span></p>
            </td>
            <td width=300>
            <p><span>2.046-16.243Mbps</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span><font size=3>&nbsp;</font></span></p>
<p><strong><span><font size=3>（<span>3</span>）<span>S</span>波段卫星</font></span></strong></p>
<p align=center><span>表<span>3 S</span>波段卫星主要系统参数和指标</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <thead>
        <tr>
            <td width=150>
            <p align=center><span>名称</span></p>
            </td>
            <td width=307>
            <p align=center><span>主要指标<span>/</span>参数</span></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td width=150>
            <p align=center><span>卫星功率</span></p>
            </td>
            <td width=307>
            <p><span>&#8805;<span>17000W</span></span></p>
            </td>
        </tr>
        <tr>
            <td width=150>
            <p align=center><span>广播信道</span></p>
            </td>
            <td width=307>
            <p align=left><span>上行频率：<span>13.75-14.00GHz</span></span></p>
            <p align=left><span>下行频率：<span>2.633-2.660GHz</span></span></p>
            <p align=left><span>卫星<span>EIRP</span>值：东部地区：<span>EIRP</span>&#8805;<span>67dBW</span></span></p>
            <p><span>西部地区：<span>EIRP</span>&#8805;<span>64dBW</span></span></p>
            </td>
        </tr>
        <tr>
            <td width=150>
            <p align=center><span>分发信道</span></p>
            </td>
            <td width=307>
            <p align=left><span>上行频率：<span>13.75-14.00GHz</span></span></p>
            <p align=left><span>下行频率：<span>12.20-12.25GHz</span></span></p>
            <p align=left><span>卫星<span>EIRP</span>值：东部地区：<span>EIRP</span>&#8805;<span>54dBW</span></span></p>
            <p><span>西部地区：<span>EIRP</span>&#8805;<span>50dBW</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span><font size=3>&nbsp;</font></span></p>
<p><strong><span><font size=3>（<span>4</span>）地面覆盖网络</font></span></strong></p>
<p align=center><span>表<span>4 </span>地面覆盖网络主要系统参数和指标</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <thead>
        <tr>
            <td width=138>
            <p align=center><span>名称</span></p>
            </td>
            <td width=319>
            <p align=center><span>主要指标<span>/</span>参数</span></p>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td width=138>
            <p align=center><span>频率</span></p>
            </td>
            <td width=319>
            <p><span>S</span><span>波段：<span>2.633-2.660GHz</span></span></p>
            <p><span>U</span><span>波段：<span>470-798MHz</span></span></p>
            </td>
        </tr>
        <tr>
            <td width=138>
            <p align=center><span>基本覆盖</span></p>
            </td>
            <td width=319>
            <p><span>便携接收：覆盖区域边缘至少<span>70%</span>以上的地点概率可接收</span></p>
            <p><span>移动接收：覆盖区域内至少<span>90%</span>以上的地点概率可接收</span></p>
            </td>
        </tr>
        <tr>
            <td width=138>
            <p align=center><span>良好覆盖</span></p>
            </td>
            <td width=319>
            <p><span>便携接收：覆盖区域边缘至少<span>95%</span>以上的地点概率可接收</span></p>
            <p><span>移动接收：覆盖区域内至少<span>99%</span>以上的地点概率可接收</span></p>
            </td>
        </tr>
        <tr>
            <td width=138>
            <p align=center><span>单频网相邻发射台间距</span></p>
            </td>
            <td width=319>
            <p><span>&#8804;<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="15.36" UnitName="km"><span>15.36Km</span></st1:chmetcnv></span></p>
            </td>
        </tr>
    </tbody>
</table>
</span>&nbsp;&nbsp;&nbsp;&nbsp;<br>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/54122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2009-02-02 15:34 <a href="http://www.cnitblog.com/liaoqingshan/archive/2009/02/02/54122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决wmv文件的许可证破解----转载</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/10/08/49974.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 08 Oct 2008 01:47:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/10/08/49974.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/49974.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/10/08/49974.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/49974.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/49974.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下过wmv的电影,下完后不能播放,所以找了此帖,希望可以帮助那些和我遇到一样问题的人.<br>我还没有试过，大家使用后有什么建议请回复。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2008/10/08/49974.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/49974.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-10-08 09:47 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/10/08/49974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何比较图像</title><link>http://www.cnitblog.com/liaoqingshan/archive/2008/09/02/48607.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Tue, 02 Sep 2008 01:48:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2008/09/02/48607.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/48607.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2008/09/02/48607.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/48607.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/48607.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我的简单算法为(假设为24位色bmp格式)：<br>对比前后两个图像每一个象素的每一个颜色字节(24位中的8位)，发现象素差大于20%时认为此象素不相同。<br>当发现有0.5%以上的象素不相同时，认为两张图片不符。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2008/09/02/48607.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/48607.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-09-02 09:48 <a href="http://www.cnitblog.com/liaoqingshan/archive/2008/09/02/48607.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/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>88</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>快速排序算法及源代码（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>6</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>1</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>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>3</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>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>5</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/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>2</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>新发现一个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<br>不过，唯一遗憾的是，需要先到论坛<a href="http://www.faqilai.com/bbs">http://www.faqilai.com/bbs</a>注册后才能下载。<br>其实论坛也有许多有用的东西的。<br><br>如果你觉得有用，也别忘了告诉你的朋友.
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/26575.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-02 15:24 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/05/02/26575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>制做防拷贝ＶＣＤ-DVD方法大全</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/04/21/25953.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 21 Apr 2007 00:56:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/04/21/25953.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/25953.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/04/21/25953.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/25953.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/25953.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 四种制做防拷贝ＶＣＤ-DVD方法大比拼！&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/04/21/25953.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/25953.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-04-21 08:56 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/04/21/25953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EPG、PSI与SI----转载</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24917.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 30 Mar 2007 06:20:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24917.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/24917.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/24917.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/24917.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" align="center" border="0">
				<tbody>
						<tr>
								<td class="main_ArticleTitle" style="WORD-BREAK: break-all" align="middle" height="35">基于DVB-SI的数字有线电视机顶盒节目指南的设计实现</td>
						</tr>
						<tr>
								<td class="main_ArticleSubheading" style="WORD-BREAK: break-all">
								</td>
						</tr>
						<tr>
								<td class="Article_tdbgall" align="middle" height="23">作者：卫星爱好… </td>
						</tr>
						<tr>
								<td height="6">
								</td>
						</tr>
						<tr>
								<td id="fontzoom" height="300">
										<div>摘要本文介绍了电子节目指南信息的构成以及MPEG-2PSI和DVB-SI信息规范，提出了一种EPG信息的存储结构和节目数据库的生成方案，并据此讲述了如何在数字有线电视机顶盒中生成电子节目指南EPG。<br /><br />　　关键词机顶盒MPEG-2PSI节目专用信息DVB-SI业务信息电子节目指南<br /><br />1引言<br /><br />　　目前数字电视已经进入快速发展阶段，与数字电视相关的业务也将大幅度增长。当节目运营商将大量的节目信息通过有线网络提供给用户，用户在欣赏高质量节目源的同时如何才能方便快捷地找到这些业务或信息就成了开发者们需要解决的一个关键问题。电子节目指南（EPG，ElectronicProgramGuide）正是为了方便用户对信息的获取而制作的运行于用户端综合接收解码器（IRD，IntegratedReceiverDecoder）的应用程序，它通过电视屏幕向用户提供由文字、图形、图像组成的人机交互界面，负责电视节目和各种业务的导航[1]。用户通过电子节目指南，能够了解到节目的相关信息（包括节目时间、播放时间、内容梗概等），并且实现对节目的快速检索和访问。<br /><br />　　EPG的形成依赖于节目播出前端将符合DVB（DigitalVideoBroadcasting）标准的业务信息（SI，ServiceInformation）插入到承载节目信息的传送流（TS，TransportStream）中，这些SI信息携带了EPG所需的全部数据。<br /><br />2电子节目指南信息的组成和传输<br /><br />　　电子节目指南信息（以下简称EPG信息）由两部分组成：基本EPG信息和扩展EPG信息。<br /><br />　　基本EPG信息是指完全可以用《数字广播业务信息规范（GY/Z174-2001）》中的网络信息表NIT、业务群关联表BAT、业务描述表SDT、事件信息表EIT等进行描述的EPG信息。<br /><br />　　扩展EPG信息是指在基本EPG信息之外，通过数据轮播传递的EPG信息，这些信息的入口采用EPG映射表EMT进行描述，信息的内容被封装成具有多级目录结构的文件系统，称为扩展EPG内容信息（XECI）。<br /><br />　　一个EPG系统至少应该包括基本EPG信息[2]。<br /><br />　　本文也仅就基本EPG信息进行论述。<br /><br />　　“数据广播业务信息规范”中NIT、BAT、SDT、EIT和EMT表都被分成一个或若干个段（section）来表示，然后插入到TS包中。段是一种用来把SI信息表和EPG信息表映射为TS包的语法结构，这些信息符合GB/T17975.1定义的专用段语法结构。段可直接映射到TS包中。段可能起始于TS包有效负载的起始处，但这并不是必须的，因为TS包有效负载的第一个段的起始位置是由pointer_field字段指定的[3]。<br /><br />3MPEG-2PSI节目专用信息与DVB-SI信息简介<br /><br />　　在数字电视中，所有的音、视频信号和数据信息经过编码后，在进入传输系统前，必须按照MPEG-2标准打包，形成固定长度的TS包，包长为188字节或204字节。对于这些长度相同的包，如果没有引导信息，IRD是无法找到所需要的码流的。为此在MPEG-2标准中专门定义了节目专用信息（PSI，ProgramSpecificationInformation），其作用在于自动设置和引导IRD进行解码[4]。<br /><br />　　PSI信息由以下四种表组成：（1）节目关联表PAT;（2）节目映射表PMT;（3）网络信息表NIT;（4）条件访问表CAT。<br /><br />　　在实际应用中，解码器IRD要对某一路特定码流进行解码时，首先要找到PAT表，根据PAT表找到所需的节目及该节目对应的PMT表的PID。PMT表中可能包含多个数字码流，每个码流都有一个唯一的PID与之对应。如果要解码的是视频码流，则在PMT表中找到videoPID值，再从TS流中过滤出PID值与之匹配的TP包并送到视频解码器。<br /><br />　　MEPG-2的PSI信息提供了相关节目组成和相互关系的信息，从而使得接收端IRD可以对多路传输流进行解析，但是这些信息在实际应用中仍显得不够，它不能提供节目的名称、节目的开始时间、持续时间及节目的附加信息等。为此在DVB中扩展定义了SI业务信息。PSI信息基本上都是与现行流（AS，ActualStream）相关的，而SI信息则可以包括不在现行流中的一些业务和事件信息，从而允许用户进行更多的选择和了解更多的其它业务信息。<br /><br />　　与PSI定义的四种表不同，SI中定义了9种表，其中构成基本EPG信息的最重要的表是网络信息表NIT、业务描述表SDT和事件信息表EIT。SI表传送的信息都是通过描述符（descriptor）的形式给出的。<br /><br />　　每个描述符都以descriptor_tag（用于唯一标识descriptor的类型）和descriptor_length开始。不同的描述符用于描述不同SI表中承载的信息[6]。<br /><br />4系统介绍<br /><br />　　本EPG系统是在STMicroelectronic公司所提供的机顶盒开发方案上实施的，其主控制芯片采用STi5518，内部集成有32位主CPU、专用DVB传输流解复用和解扰模块、MEPG-2音、视频解码单元、数字视频编码器及各种接口等。与之配套的软件开发平台选用的也是该公司开发的STLite/OS20嵌入式操作系统，支持多任务、存储器管理、进程调度、定时器管理等实时特性。该系统能实时接收用户通过遥控按键或前面板触发的交互信号，实现节目基本信息的浏览、节目列表的生成、节目之间的跳转以及节目预告信息的查询等。<br /><br />5系统设计及实现<br /><br />5.1EPG信息的存储结构<br /><br />　　TS流里携带的EPG数据信息通过IRD接收以后都以树状链表的结构存储在PROG_INFO_STRUCT和TRANSPONDER_INFO_STRUCT这样两个结构中。<br /><br />　　在本机顶盒有关节目操作的各项功能中，绝大部分都与节目数据库有关，比如自动节目搜索时，需要建立节目数据库，并为搜索到的节目在数据库中建立相应的数据单元，用于存储该节目的各种信息；在切换节目时，需要根据不同节目中音、视频数据的PID值从而选择不同的码流进行音、视频解码等。<br /><br />　　节目数据库主要来自PSI表的内容。<br /><br />　　在具体的软件实现过程中，节目数据库的建立主要通过ParsePAT（）、ParsePMT（）两个函数来实现。ParsePAT（）函数调用的结果是得到有线传输系统中不同的节目PID，而ParsePMT则获取各个节目中音、视频码流的PID值。<br /><br />5.2节目跳转的实现<br /><br />　　系统响应用户在不同节目之间的切换时，需要将用户选定节目的音、视频码流从复用的多路节目码流中提取出来并分别送到音、视频解码器进行解码。它依赖于硬件可编程传输接口（PTI，ProgrammableTransportInterface）来实现。在系统生成的节目数据库结构中的stProgNo变量存储有转发器号TransponderId及节目的音、视频PID值。<br /><br />5.3事件信息的获取<br /><br />　　事件信息表EIT按时间顺序提供每个业务中包含的事件的信息。（这里的事件相当于传统意义上的节目，而业务则指的是提供节目源的某个电视台，如业务“中央电视台-1”的事件“新闻联播”。）EIT包含两种不同类型的表，分别为EITpresent/following（简称EITp/f）和EITSchedule（EIT-S）。EITp/f给出了指定业务中当前和后一个事件的信息，而EIT-S则包含一周内或更长时间的节目预告信息。任何构成EIT的eventinformationsection均在PID为0x0012的TS包中传输，它给出了业务中事件的名称、事件开始时间、持续时间及其他一些信息。<br /><br />　　以下以EITp/f为例来讲述事件信息的获取方式：<br /><br />　　在EITp/f中，每个业务service都用两个section分别来描述当前（present）和后续（following）信息，其中的sectionnumber为0的用来描述当前事件，而sectionnumber为1的section则用来描述后续事件。<br /><br />　　在节目信息结构PROG_INFO_STRUCT中，定义了EVENT_INFO_BASIC类型的二维数组event_info_database[2]用来存放一个业务中的present和following事件的信息。这些信息包括事件的名称、事件的开始时间、事件的持续时间。<br /><br />　　事件的日期和时间在TS流里是按照MJD（ModifiedJulianDate，修正的儒略日期）+UTC（UniversalTimeCo-ordinate，通用时间坐标）的格式并以16进制的形式给出的。在MJD+UTC和localMJD+localtime之间的转换可参照GY/Z174-2001来进行。如TS流里的数据为0xCE1F005600010600，则转换以后得到的信息为：该事件的播出时间为2003年5月8日，星期四，开始时间为00：56：00，持续时间为01：06：00。<br /><br />　　而事件的名称则通过解析描述符short_event_descriptor来实现。并将得到的信息存储在event_info_database结构中。<br /><br />　　所有解析得到的信息最终都将存储在节目数据库中，提供给显示模块直接调用。<br /><br />6结束语<br /><br />　　真正完整意义上的EPG的功能是十分强大的，它不仅能提供节目表单和当前节目播放等基本功能，还可提供节目预定和家长分级控制等高级功能。本文从实用的角度给出了一个基本EPG系统的实现方案。另外我们也实现了EPG交互式应用中的SI增值业务如天气预报、新闻、股票数据等的接收，以菜单触发的形式提供给用户一个由文本和图形组成的反馈信息。<br /></div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/24917.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-03-30 14:20 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PSI解复用原理----转载</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24914.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 30 Mar 2007 05:55:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24914.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/24914.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24914.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/24914.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/24914.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 搞了三年DVB,连最基本的PSI我也不懂，是不是有点丢人？<br>也许就要离开公司了，现在学习会不会太晚？<br>当初进公司看到这一大堆表，满纸英文，我就放弃了。<br>这是一篇中文文档，可以看一看。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24914.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/24914.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-03-30 13:55 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/03/30/24914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EOC</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/02/27/23388.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Tue, 27 Feb 2007 05:33:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/02/27/23388.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/23388.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/02/27/23388.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/23388.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/23388.html</trackback:ping><description><![CDATA[
		<div class="box2 p14">年前在一广电中心开发，遇到一新产品：EOC，感觉很新鲜。试用了一下，速度还蛮快的，实际应用与单线以太网相差不了多少。<br />以下是网上关于EOC的解释：<br /><strong>EoC（Ethernet over Coax 以太数据通过同轴电缆传输）</strong><br />在有线电视网络双向改造的方案中，除了HFC（Hybrid Fiber Coaxial）方案（CM）和光纤收发器到楼+LAN入户方案，一种新的方案即EPON（或GePON）+EoC（Ethernet over Coax）技术方案正在越来越受到关注。<br />EoC（以太数据通过同轴电缆传输）技术方案之一是基带（Baseband，无需复杂的频率移动就可传送数字信号的传输媒介）方案。这是一种性价比很高的方案，利用同轴电缆代替五类线作基带传输（占用0-30MHz频带，10Mbps半双工） <br />附图(输入为HFC,输出为HFC和ETH)：<br /><div align="center"><a class="s" href="http://www.todaytoy.com/productshow/product_63010.html#" target="_blank"><img src="http://cn.sonhoo.com/picture/1418932007118144767.jpg" onload="if(this.width&gt;500)this.width=500" border="0" /><font color="#333333"></font></a></div></div>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/23388.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-02-27 13:33 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/02/27/23388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备份和恢复IP设置</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/02/07/22767.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 07 Feb 2007 05:42:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/02/07/22767.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/22767.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/02/07/22767.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/22767.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/22767.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一台笔记本，在公司与家里来回奔跑，手动改IP多累啊。<br>现在你终于可以歇一歇了。<br>Windows 2000操作系统内置了一个本地或远程计算机的命令行和脚本实用程序“NetSh”，我们可以利用它来备份、恢复网络属性设置。 &nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/02/07/22767.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/22767.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-02-07 13:42 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/02/07/22767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CNZZ 统计代码及作弊分析--转载</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22368.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 27 Jan 2007 03:43:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22368.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/22368.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22368.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/22368.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/22368.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt">CNZZ 统计代码及作弊分析--By Null<br /><br />CNZZ,中国站长联盟的论坛统计服务，是比较常用的~~<br />现在我们来分析一下~~<br /><br />开通 CNZZ 的统计服务之后，可以获得一串统计代码，如下，是我的某主页的统计代码。<br /><font color="#0000ff">&lt;script src='http://s72.cnzz.com/stat.php?id=301307&amp;web_id=301307&amp;online=1' language='JavaScript' charset='gb2312'&gt;&lt;/script&gt;</font><br /><br />这里，可以获取统计的基本信息<br /><font color="#0000ff">s72.cnzz.com  <font color="#000000">用于统计的服务器</font><br /></font><font color="#0000ff">301307           <font color="#000000">您的统计ID,也就是标示符<br /><br />如果直接打开<br /></font></font><a href="http://s72.cnzz.com/stat.php?id=301307&amp;web_id=301307&amp;online=1" target="_blank"><font color="#0000ff">http://s72.cnzz.com/stat.php?id=301307&amp;web_id=301307&amp;online=1</font></a><br />会得到一个js脚本，如下：<br /><pre><font color="#0000ff">var expireDate=new Date();<br />var hours=expireDate.getHours();<br />var minutes=expireDate.getMinutes();<br />var seconds=expireDate.getSeconds();<br />var now=expireDate.getTime();<br />function getCookieVal_cnzz (offset){var endstr = document.cookie.indexOf(";",offset);<br />if (endstr==-1)<br />endstr=document.cookie.length;<br />return unescape(document.cookie.substring(offset,endstr));}<br />function GetCookie_cnzz(name){<br />var arg=name+"=";<br />var alen=arg.length;<br />var clen=document.cookie.length;<br />var i=0;<br />while(i&lt; clen){<br />var j=i+alen;<br />if(document.cookie.substring(i,j)==arg)<br />return getCookieVal_cnzz(j);<br />i=document.cookie.indexOf(" ",i) + 1;<br />if(i==0)break;}<br />return null;}<br />var agt=navigator.userAgent.toLowerCase();<br />data='&amp;<span class="entity">agt</span>='+escape(agt)+'&amp;<span class="entity">r</span>='+escape(document.referrer)+ '&amp;<span class="entity">aN</span>='+escape(navigator.appName)+'&amp;<span class="entity">lg</span>='+escape(navigator.systemLanguage) + '&amp;<span class="entity">OS</span>=' + escape(navigator.platform)+'&amp;<span class="entity">aV</span>='+escape(navigator.appVersion)+'&amp;<span class="entity">ntime</span>=0.46849800 1164934362';<br />a=GetCookie_cnzz("cnzz02");<br />if(a!=null){a=parseInt(a);a=a+1;}<br />else a=0;<br />data=data+'&amp;<span class="entity">repeatip</span>='+a;<br />rtime=GetCookie_cnzz("rtime");<br />ltime=GetCookie_cnzz("ltime");<br />cnzz_eid=GetCookie_cnzz("cnzz_eid");<br />if(cnzz_eid == null){cnzz_eid=Math.floor(Math.random()*100000000)+"-"+document.referrer;}<br />if(ltime&lt; 1000000){rtime=0;ltime=0;}<br />else rtime=parseInt(rtime);<br />if(rtime&lt; 1) rtime=0;<br />ltime=parseInt(ltime);<br />now=parseInt(now);<br />if(((now-ltime)&gt;43200*1000)&amp;&amp;(ltime&gt;0))<br />rtime=rtime+1 ;<br />data=data+'&amp;<span class="entity">rtime</span>='+rtime+'&amp;<span class="entity">cnzz_eid</span>='+escape(cnzz_eid);<br />data=data+'&amp;<span class="entity">showp</span>='+escape(screen.width+'x'+screen.height) ;<br />document.write('&lt;<span class="start-tag">a</span><span class="attribute-name"> href</span>=<span class="attribute-value">"http://cnzz.com/stat/website.php?web_id=301307" </span><span class="attribute-name">target</span>=<span class="attribute-value">_blank </span><span class="attribute-name">title</span>=<span class="attribute-value">"站长统计"</span>&gt;&lt;<span class="start-tag">img</span><span class="attribute-name"> border</span>=<span class="attribute-value">0  </span><span class="attribute-name">hspace</span>=<span class="attribute-value">0 </span><span class="attribute-name">vspace</span>=<span class="attribute-value">0 </span><span class="attribute-name">src</span>=<span class="attribute-value">"http://s72.cnzz.com/icon1.gif" </span><span class="attribute-name">width</span>=<span class="attribute-value">20 </span><span class="attribute-name">height</span>=<span class="attribute-value">20</span>&gt;&lt;/<span class="end-tag">a</span>&gt;');<br />document.write('&lt;<span class="start-tag">iframe</span><span class="attribute-name"> frameborder</span>=<span class="attribute-value">0 </span><span class="attribute-name">marginwidth</span>=<span class="attribute-value">0 </span><span class="attribute-name">marginheight</span>=<span class="attribute-value">0 </span><span class="attribute-name">src</span>=<span class="attribute-value">"http://s72.cnzz.com/stat.htm?id=301307'+ data +'" </span><span class="attribute-name">scrolling</span>=<span class="attribute-value">no </span><span class="attribute-name">width</span>=<span class="attribute-value">0 </span><span class="attribute-name">height</span>=<span class="attribute-value">0</span>&gt;&lt;/<span class="end-tag">iframe</span>&gt;');<br />var lefttime=1000*(86400-hours*3600-minutes*60-seconds);expireDate.setTime(expireDate.getTime() + 500*86400);document.cookie="cnzz02="+a+"; expires="+expireDate.toGMTString()+ "; path=/";<br />var lefttime=1000*86400*182;expireDate.setTime(now + lefttime);document.cookie="rtime="+rtime+";expires="+expireDate.toGMTString()+ ";path=/";document.cookie="ltime="+now+";expires=" + expireDate.toGMTString()+ ";path=/";document.cookie="cnzz_eid="+escape(cnzz_eid)+ ";expires="+expireDate.toGMTString()+";path=/";</font></pre>其主要内容是用来收集系统的一些基本信息以及设置获取浏览记录,并将信息发送到服务器，以供统计...<br /><br />用 WSockExpert 抓包，得到如下内容：<br /><a href="http://s72.cnzz.com/stat.htm?id=301307&amp;agt=mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 2.0.50727)&amp;r=http://hi.baidu.com/hetaoos&amp;aN=Microsoft Internet Explorer&amp;lg=zh-cn&amp;OS=Win32&amp;aV=4.0 (compatible; MSIE 6.0; Wind" target="_blank"><font color="#ff0000">http://</font><font color="#ff0000">s72.cnzz.com/stat.htm?id=</font><font color="#ff0000">301307&amp;agt=mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 2.0.50727)&amp;r=http://hi.baidu.com/hetaoos&amp;aN=Microsoft Internet Explorer&amp;lg=zh-cn&amp;OS=Win32&amp;aV=4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)&amp;ntime=0.37485600 1160206257&amp;repeatip=0&amp;rtime=3&amp;cnzz_eid=46457-http://hi.baidu.com/hetaoos&amp;showp=1280x1024</font></a><br /><br />下面是 POST 信息分析：<br /><font color="#0000ff">id=301307</font>                                         '统计ID<br /><font color="#0000ff">agt=mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 2.0.50727) </font>   '浏览器类型 navigator.userAgent.toLowerCase()<br /><font color="#0000ff">r=</font><font color="#0000ff">http://hi.baidu.com/hetaoos</font>            'referrer 就是从那里打开的 escape(document.referrer)<br /><font color="#0000ff">aN=Microsoft Internet Explorer </font>         '浏览器名escape(navigator.appName) (Microsoft Internet Explorer/Netscape/mozilla)<br /><font color="#0000ff">lg=zh-cn </font>                                           '语言 escape(navigator.systemLanguage)<br /><font color="#0000ff">OS=Win32</font>                                        '系统 escape(navigator.platform) Win32、Win16、Mac68k、MacPPC 和各种 Unix<br /><font color="#0000ff">aV=4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)</font> 浏览器版本 escape(navigator.appVersion)<br /><font color="#0000ff">ntime=0.93801900 1160300941 </font>   <br /><font color="#0000ff">repeatip=0</font>                                        '设为0 就有独立IP咯            <br /><font color="#0000ff">rtime=0 </font>                                            '回访次数<br /><font color="#0000ff">cnzz_eid=67002077-</font><font color="#0000ff">http://hi.baidu.com/hetaoos </font>       ' 未知用途，产生方法Math.floor(Math.random()*100000000)+"-"+document.referrer;<br /><font color="#0000ff">showp=1280x1024</font>                           '屏幕分辨率 escape(screen.width+'x'+screen.height) <br /><br />至于作弊，就是不断的打开上面那长长的统计信息 URL 就可以了<br />如果打开成功，返回的信息是 <font color="#0000ff">Power by Cnzz</font><br />看看我写的工具<br /><div align="center" forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/hetaoos/pic/item/20d674f0318ba3c27831aa3c.jpg" border="0" small="0" /></div>开150线程，网络好的话，小时刷3W的PV，IP嘛，只用一个~~~<br /><br />PS:<br />看到 ProxyClick.exe，呵呵，这个东西也是用来刷的，但只能开20线程~~~<br /><br />说完了，快点去写直接的作弊工具吧~~~~<br />PS:<br />通过对 cnzz 作弊，还可以提高 Alexa 排名，虽然很小~~~<br />cnzz 作弊始终是不好的，还是花时间努力搞好自己的论坛或主页为好~~~<br /><br /></div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/22368.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-01-27 11:43 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>电脑保洁师--给电脑洗个澡</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22366.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 27 Jan 2007 02:46:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22366.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/22366.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/22366.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/22366.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#804000" size="2">    作为IT人士，电脑是自己的亲密伙伴和第二老婆。可是我们在使用它的时候，却忘了给它做护理。<br />    书上是这么说的：“鼠标、荧光屏及主机内部的细菌种类，已超过2000种。感染了这些病菌，电脑操作者会出现伤风、耳朵发炎甚至肺炎等多种疾病。同时，这些污垢、细菌还会使电脑运行速度变慢，经常死机甚至无法启动。”<br />    这么说法太专业，其实，就我们的切身感受来说，电脑，最脏的就是键盘，最难清洗的也是键盘。鼠标、显示屏脏了用湿布擦擦，其它看不到，摸不着的地方可以暂时不管。但是键盘呢？我们不能不打字吧？<font color="#ff0000">瞧一瞧键盘上闪闪发亮的油腻，眇一眇按键下洒落的吃剩的饼屑......也许你此时正一手啃着苹果，一手翻着网页在看此文呢！<br /></font>    唉，我都不敢碰这键盘了。怎么办？这么脏的键盘，怎么洗，谁来洗？<br />    我告诉你，“电脑保洁师”可以帮你忙！<br />    从主板到CPU，从显示器到游戏手柄，从鼠标到键盘......自上而下，由里及外，还您一台全新的电脑。<br />    请拨打热线电话：0755-25782957，13714226024<br />    联系人：王小姐<br />    服务时间：8:00--20:00 <br />    服务区域：暂限服务于深圳市南山区、福田区、罗湖区<br />    网站：<a href="http://www.faqilai.com">http://www.faqilai.com</a><br />    <br /><br /></font>
		</strong>
<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/22366.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-01-27 10:46 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/01/27/22366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>彻底清除 mplay.com与mplay.exe病毒</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/01/19/22076.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 19 Jan 2007 07:48:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/01/19/22076.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/22076.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/01/19/22076.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/22076.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/22076.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 现象：DOS命令变慢，或无法执行。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/01/19/22076.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/22076.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-01-19 15:48 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/01/19/22076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言嵌入式系统编程修炼(一至六)--转载</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21990.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 17 Jan 2007 10:03:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21990.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/21990.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/21990.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/21990.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 嵌入式开发必读！&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21990.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/21990.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-01-17 18:03 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>嵌入式系统 Boot Loader 技术内幕</title><link>http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21982.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 17 Jan 2007 07:29:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21982.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/21982.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21982.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/21982.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/21982.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这文章太好了。<br>详细啊。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21982.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/21982.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-01-17 15:29 <a href="http://www.cnitblog.com/liaoqingshan/archive/2007/01/17/21982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ovcjsaho.exe是什么程序</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21151.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 27 Dec 2006 02:07:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21151.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/21151.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/21151.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/21151.html</trackback:ping><description><![CDATA[在我的任务栏出现，掐不死。baidu,google也查不到。<br />cpu 0%, 7秒，memory 26,360K<br />在本地创建了一个127.0.0.1:1840的UDP端口，传入1M，传出200K数据。<br />文件位置：C:\Windows\system32\OVCJSAHO.EXE<br />文件大小：714.5K<br />日期：2006年12月25日  2:6:13<br />没有任何版权声明。<br /><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/21151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-12-27 10:07 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“任务管理器”被禁用</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21150.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Wed, 27 Dec 2006 01:53:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21150.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/21150.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/21150.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/21150.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近，我的PC出现了莫名其妙的问题：鼠标间断性被控制；打开浏览器后无论看什么网页都自动弹出网页，自动关闭浏览器；任务管理器被禁用；显示有MAC欺骗；<br>种种迹象表明，我中毒了，可是，我用360安全卫士，用MACFEE，用Tco!stream都防不住啊，这些垃圾！<br>任务管理器手工解决了，但病毒还在，小弟在此候招。&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21150.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/21150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-12-27 09:53 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/12/27/21150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MSN、QQ、IG通吃</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/12/16/20611.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sat, 16 Dec 2006 05:17:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/12/16/20611.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/20611.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/12/16/20611.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/20611.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/20611.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: QQ解禁又一强招！&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2006/12/16/20611.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/20611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-12-16 13:17 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/12/16/20611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>博客金行的玩意！</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/11/05/18858.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Sun, 05 Nov 2006 12:20:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/11/05/18858.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/18858.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/11/05/18858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/18858.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/18858.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 博客金行，是谁才能玩的游戏？&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2006/11/05/18858.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/18858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-11-05 20:20 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/11/05/18858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cable Modem为什么上不了线？</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/11/03/18808.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 03 Nov 2006 06:59:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/11/03/18808.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/18808.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/11/03/18808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/18808.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/18808.html</trackback:ping><description><![CDATA[我一个Cable Modem，接上天威信号后，一直处于send状态。不知道为什么啊？<br />Cable Modem的上传频率是多少？我的是不是不对？<br />这个Cable Modem已经在这根线上是上过的。现在却上不了了：（<br /><center><table width="500" border="0"><tbody><tr><td><h2>Cable Status</h2><table class="odd" border="2"><tbody><tr><td>Initialize Hardware </td><td><script><![CDATA[
if(cable_status<=2)
document.write("<i>Process...</i>);
if(cable_status>=3)
document.write("Success");
]]&gt;</script>
Success 
</td></tr><tr><td>Find Downstream </td><td><script><![CDATA[
if(cable_status==3)
document.write("<i>Process...</i>);
if(cable_status>=4)
document.write("Success");
]]&gt;</script>
Success 
</td></tr><tr><td>Ranging </td><td><script><![CDATA[
if(cable_status==4 || cable_status==5)
document.write("<i>Process...</i>);
if(cable_status>=6)
document.write("Success");
]]&gt;</script><i>Process...</i></td></tr><tr><td>DHCP Bound </td><td><script><![CDATA[
if(cable_status==6)
document.write("<i>Process...</i>);
if(cable_status>=7)
document.write("Success");
]]&gt;</script></td></tr><tr><td>Set Time-of-Day </td><td><script><![CDATA[
if(cable_status==7)
document.write("<i>Process...</i>);
if(cable_status>=8)
{
if (TodSuccess=="1")
document.write("Success");
else
document.write("ToD Server Not Found");
}
]]&gt;</script></td></tr><tr><td>Download CM Config File </td><td><script><![CDATA[
if(cable_status==8 || cable_status==9)
document.write("<i>Process...</i>);
if(cable_status>=10)
document.write("Success");
]]&gt;</script></td></tr><tr><td>Registration </td><td><script><![CDATA[
if(cable_status==10)
document.write("<i>Process...</i>);
if(cable_status>=11)
document.write("Success");
if(cable_status==12)
document.write("<tr><td colspan=2><center><b>Traffic Enable!</b>/center></td>/tr>");
if(cable_status==13)
document.write("<tr><td colspan=2><center><b>Refused By CMTS!</b>/center></td>/tr>");
]]&gt;</script></td></tr></tbody></table><br /><center></center><form name="dsPause" action="/goform/Cable" method="post"><!--<form name=dsPause method=GET>--><input type="hidden" value="rf_status" name="file" /><input type="hidden" name="doScanning" /><input disabled="" onclick="dsPauseClick()" type="checkbox" name="scan_stop" />Pause Searching Downstream </form><script language="javascript"><![CDATA[
document.dsPause.scan_stop.checked = (doScanning=="0")?true:false;

if(cable_status>=4)
document.dsPause.scan_stop.disabled = true;

if(cable_status<12 && !document.dsPause.scan_stop.checked)
document.write("<meta http-equiv='refresh' content='5;url=rf_status.asp'>")
]]&gt;</script></td></tr></tbody><meta http-equiv="refresh" content="5;url=rf_status.asp" /></table></center><a onclick="setRfMenu(&quot;info&quot;)" href="http://192.168.100.1/rf_info.asp" target="main"><br /><center><table width="500" border="0"><tbody><tr><td><h2>Downstream Signal</h2><table class="odd" border="2"><form name="dsForm" action="/goform/Cable" method="post"><tbody><tr><td>Default Downstream Frequency: 
</td><td><input type="hidden" value="rf_signal" name="file" /><input maxlength="9" size="9" value="291000000" name="ds_frequency" /> Hz <input type="hidden" name="save" /><input class="button" onclick="changeFreq()" type="button" align="middle" value="Apply" /></td></tr></tbody></form><tr><td>Frequency: 
</td><td>291000000 Hz 
</td></tr><tr><td>QAM Mode: 
</td><td>64 QAM 
</td></tr><tr><td>Channel Power: 
</td><td>-15.1 dBmV 
</td></tr><tr><td>SNR: 
</td><td>30.963 dB </td></tr></table></td></tr></tbody></table><br /><h2>Upstream Signal</h2><table class="odd" border="2"><tbody><tr><td>Channel Id: 
</td><td>4 
</td></tr><tr><td>Frequency: 
</td><td>51984000 Hz 
</td></tr><tr><td>Channel Width: 
</td><td>3200000 Hz 
</td></tr><tr><td>Channel Power: 
</td><td>58.0 dBmV </td></tr></tbody></table><br /><script><![CDATA[
if (CoSDataNum!=0)
{
document.write('<h2>DOCSIS1.0 Class of Service Parameters</h2>);
document.write('<table border=2 class=odd><tr><td>Class ID');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i]);
document.write('<tr><td>Max Downstream Rate (bps)');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i+1]);
document.write('<tr><td>Max Upstream Rate (bps)');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i+2]);
document.write('<tr><td>Upstream Channel Priority');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i+3]);
document.write('<tr><td>Guaranteed Min Upstream Data Rate (bps)');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i+4]);
document.write('<tr><td>Max Upstream Transmit Burst (bytes)');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i+5]);
document.write('<tr><td>Privacy Enable');
for (var i=0; i<CoSDataNum; i++)
document.write('<td>'+CoSData[7*i+6]);
document.write('</table>br>');
}
]]&gt;</script><h2>DOCSIS1.0 Class of Service Parameters</h2><table class="odd" border="2"><tbody><tr><td>Class ID 
</td><td>1 
</td></tr><tr><td>Max Downstream Rate (bps) 
</td><td>0 
</td></tr><tr><td>Max Upstream Rate (bps) 
</td><td>0 
</td></tr><tr><td>Upstream Channel Priority 
</td><td>0 
</td></tr><tr><td>Guaranteed Min Upstream Data Rate (bps) 
</td><td>0 
</td></tr><tr><td>Max Upstream Transmit Burst (bytes) 
</td><td>0 
</td></tr><tr><td>Privacy Enable 
</td><td>0</td></tr></tbody></table><br /><script><![CDATA[
if (QoSDataNum!=0)
{
document.write('<h2>DOCSIS1.1 Quality of Service Parameters</h2>);
document.write('<table border=2 class=odd><tr><td>Direction');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i]);
document.write('<tr><td>SFID');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i+1]);
document.write('<tr><td>SID');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i+2]);
document.write('<tr><td>Traffic Priority');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i+3]);
document.write('<tr><td>Max Sustained Traffic Rate (bps)');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i+4]);
document.write('<tr><td>Max Transmit Burst (bytes)');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i+5]);
document.write('<tr><td>Min Reserved Traffic Rate (bps)');
for (var i=0; i<QoSDataNum; i++)
document.write('<td>'+QoSData[8*i+6]);
document.write('<tr><td>Service Flow Scheduling Type');
for (var i=0; i<QoSDataNum; i++)
{
document.write('<td>');
if (QoSData[8*i+7]==2) document.write('Best Effort');
else if (QoSData[8*i+7]==3) document.write('Non-Real-Time Polling Service');
else if (QoSData[8*i+7]==4) document.write('Real-Time Polling Service');
else if (QoSData[8*i+7]==5) document.write('Unsolicited Grant Service with Activity Detection');
else if (QoSData[8*i+7]==6) document.write('Unsolicited Grant Service');
else document.write('N/A');
}
}
]]&gt;</script></center><div class="menu_item"></div></a>请高手赐教。<img src ="http://www.cnitblog.com/liaoqingshan/aggbug/18808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-11-03 14:59 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/11/03/18808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>征集“线程”管理办法</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/10/20/18182.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Fri, 20 Oct 2006 04:41:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/10/20/18182.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/18182.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/10/20/18182.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/18182.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/18182.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我有一个项目，需要多线程工作。<br>所有子线程从一个fifo中取原始数据，分析。分析的结果会产生新的原始数据要写入fifo<br>主线程负责创建创建线程，并控制子线程个数不能大于4。<br>此外，主线程在以下情况退出：<br>1、接受用户消息要可以随时停止，并在所有子线程退出后退出。<br>2、在所有子线程退出后退出后，发现fifo没有新数据时。<br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/liaoqingshan/archive/2006/10/20/18182.html'>阅读全文</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/18182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-10-20 12:41 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/10/20/18182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手把手教你BLOG行销</title><link>http://www.cnitblog.com/liaoqingshan/archive/2006/08/24/15890.html</link><dc:creator>游子</dc:creator><author>游子</author><pubDate>Thu, 24 Aug 2006 10:33:00 GMT</pubDate><guid>http://www.cnitblog.com/liaoqingshan/archive/2006/08/24/15890.html</guid><wfw:comment>http://www.cnitblog.com/liaoqingshan/comments/15890.html</wfw:comment><comments>http://www.cnitblog.com/liaoqingshan/archive/2006/08/24/15890.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/liaoqingshan/comments/commentRss/15890.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/liaoqingshan/services/trackbacks/15890.html</trackback:ping><description><![CDATA[手把手教你BLOG行销<a href="http://book.csdn.net/bookfiles/97/index.html"><br />http://book.csdn.net/bookfiles/97/index.html</a><br /><br />还有我的另一篇文章：<br /><br /><a class="singleposttitle" id="viewpost1_TitleUrl" href="http://www.cnweblog.com/kid0030/archive/2006/04/24/103592.html"><font color="#6fbc4c">阿坏教你妆点博客，建设品位家园</font></a><br /><a href="/liaoqingshan/archive/2006/05/30/11234.html">http://www.cnitblog.com/liaoqingshan/archive/2006/05/30/11234.html</a><br /><br />CSDN上的文章：<br /><u><font color="#800080">让Blog访问量翻倍的8个实用方法</font></u><br /><a href="http://blog.csdn.net/hotmailmsn/archive/2006/08/21/1100991.aspx">http://blog.csdn.net/hotmailmsn/archive/2006/08/21/1100991.aspx</a><img src ="http://www.cnitblog.com/liaoqingshan/aggbug/15890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/liaoqingshan/" target="_blank">游子</a> 2006-08-24 18:33 <a href="http://www.cnitblog.com/liaoqingshan/archive/2006/08/24/15890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>