⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 framer_8cpp.html

📁 计算crc校验码的程序
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>famer: framer.cpp文件参考</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- 制作者 Doxygen 1.3.9.1 --><div class="qindex"><a class="qindex" href="index.html">首页</a> | <a class="qindex" href="namespaces.html">名字空间列表</a> | <a class="qindex" href="files.html">文件列表</a> | <a class="qindex" href="globals.html">文件成员</a></div><h1>framer.cpp文件参考</h1>定义控制台应用程序的入口点。 <a href="#_details">更多...</a><p><code>#include "<a class="el" href="stdafx_8h-source.html">stdafx.h</a>"</code><br><code>#include "<a class="el" href="framer_8h-source.html">framer.h</a>"</code><br><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Namespaces</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html">std</a></td></tr><tr><td colspan="2"><br><h2>函数</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="framer_8cpp.html#a0">frameheader</a> (char *outfile, char *tempfile)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">形成帧的前导码、帧定界符、目的地址和源地址,输出到输出文件。.  <a href="#a0"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="framer_8cpp.html#a1">length</a> (char *infile, char *tempfile)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">将输入文件的字节长度文件数据输出到临时文件,不足46字节的以0补齐。  <a href="#a1"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="framer_8cpp.html#a2">crc</a> (char *tempfile, char *outfile)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">根据临时文件计算crc校验码,并把计算结果和临时文件的数据输出到输出文件。  <a href="#a2"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="framer_8cpp.html#a3">_tmain</a> (int argc, _TCHAR *argv[])</td></tr></table><hr><a name="_details"></a><h2>详细描述</h2>定义控制台应用程序的入口点。 <p>: <hr><h2>函数文档</h2><a class="anchor" name="a3" doxytag="framer.cpp::_tmain"></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0">  <tr>    <td class="mdRow">      <table cellpadding="0" cellspacing="0" border="0">        <tr>          <td class="md" nowrap valign="top">int _tmain           </td>          <td class="md" valign="top">(&nbsp;</td>          <td class="md" nowrap valign="top">int&nbsp;</td>          <td class="mdname" nowrap> <em>argc</em>, </td>        </tr>        <tr>          <td class="md" nowrap align="right"></td>          <td class="md"></td>          <td class="md" nowrap>_TCHAR *&nbsp;</td>          <td class="mdname" nowrap> <em>argv</em>[]</td>        </tr>        <tr>          <td class="md"></td>          <td class="md">)&nbsp;</td>          <td class="md" colspan="2"></td>        </tr>      </table>    </td>  </tr></table><table cellspacing="5" cellpadding="0" border="0">  <tr>    <td>      &nbsp;    </td>    <td><p><div class="fragment"><pre class="fragment">00178 {00179         <span class="keywordflow">if</span>(argc!=3)                                   <span class="comment">//输入命令行参数不合要求,返回失败</span>00180         {00181                 cout&lt;&lt;<span class="stringliteral">"USAGE:framer inputfile outputfile"</span>&lt;&lt;endl;00182                 cout&lt;&lt;<span class="stringliteral">"inputfile name:input1 || input2"</span>&lt;&lt;endl;00183                 <span class="keywordflow">return</span> 1;00184         }00185 00186                                                                   00187 00188         _TCHAR tname[20];                         <span class="comment">//生成临时文件的名字 t+输出文件名 </span>00189         tname[0]=<span class="charliteral">'t'</span>;00190         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0;argv[2][j]!=<span class="charliteral">'\0'</span>;j++)00191                 tname[j+1]=argv[2][j];00192         tname[j+1]=<span class="charliteral">'\0'</span>;00193 00194         00195         <span class="keywordflow">if</span>(<a class="code" href="framer_8h.html#a0">frameheader</a>(argv[2],tname))                <span class="comment">//生成帧头部的前导码、帧定界符、目的地址和源地址,输出到输出文件</span>00196                 cout&lt;&lt;<span class="stringliteral">"frame header formed"</span>&lt;&lt;endl;00197         <span class="keywordflow">else</span>                                          <span class="comment">//失败则返回</span>00198         {00199                 cout&lt;&lt;<span class="stringliteral">"frame header form failed"</span>&lt;&lt;endl;00200                 <span class="keywordflow">return</span> 1;00201         }00202         <span class="keywordflow">if</span>(<a class="code" href="framer_8h.html#a1">length</a>(argv[1],tname))             <span class="comment">//将输入文件的字节长度、文件数据输出到临时文件,不足46字节的以0补齐。</span>00203                 cout&lt;&lt;<span class="stringliteral">"data length count finished"</span>&lt;&lt;endl;00204         <span class="keywordflow">else</span>00205         {00206                 cout&lt;&lt;<span class="stringliteral">"data length count failed"</span>&lt;&lt;endl;00207                 <span class="keywordflow">return</span> 1;00208         }00209         <span class="keywordflow">if</span>(<a class="code" href="framer_8h.html#a2">crc</a>(tname,argv[2]))                         <span class="comment">//根据临时文件计算crc校验码,并把计算结果和临时文件的数据输出到输出文件。</span>00210                 cout&lt;&lt;<span class="stringliteral">"crc finished"</span>&lt;&lt;endl;00211         <span class="keywordflow">else</span>00212         {00213                 cout&lt;&lt;<span class="stringliteral">"crc failed"</span>&lt;&lt;endl;00214                 <span class="keywordflow">return</span> 1;00215         }00216 00217         <span class="keywordflow">return</span> 0;00218 }</pre></div><p>    </td>  </tr></table><a class="anchor" name="a2" doxytag="framer.cpp::crc"></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0">  <tr>    <td class="mdRow">      <table cellpadding="0" cellspacing="0" border="0">        <tr>          <td class="md" nowrap valign="top">bool crc           </td>          <td class="md" valign="top">(&nbsp;</td>          <td class="md" nowrap valign="top">char *&nbsp;</td>          <td class="mdname" nowrap> <em>tempfile</em>, </td>        </tr>        <tr>          <td class="md" nowrap align="right"></td>          <td class="md"></td>          <td class="md" nowrap>char *&nbsp;</td>          <td class="mdname" nowrap> <em>outfile</em></td>        </tr>        <tr>          <td class="md"></td>          <td class="md">)&nbsp;</td>          <td class="md" colspan="2"></td>        </tr>      </table>    </td>  </tr></table><table cellspacing="5" cellpadding="0" border="0">  <tr>    <td>      &nbsp;    </td>    <td><p>根据临时文件计算crc校验码,并把计算结果和临时文件的数据输出到输出文件。 <p><dl compact><dt><b>参数:</b></dt><dd>  <table border="0" cellspacing="2" cellpadding="0">    <tr><td valign="top"></td><td valign="top"><em>char*</em>&nbsp;</td><td>tempfile 临时文件名 </td></tr>    <tr><td valign="top"></td><td valign="top"><em>char*</em>&nbsp;</td><td>outfile 输出文件名 </td></tr>  </table></dl><dl compact><dt><b>返回:</b></dt><dd>输出成功,则返回真。</dd></dl><div class="fragment"><pre class="fragment">00107 {00108         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="framer_8cpp.html#a2">crc</a> = 0x00;                       <span class="comment">//crc校验码值(寄存器),初始化为0。</span>00109         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> gx = 0x07;                        <span class="comment">//对应于G(x)=x8+x2+x1+x0</span>00110         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> oput = 0;                         <span class="comment">//每次左移时,移出的一位</span>00111     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> temp;00112         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> otemp;00113         00114         ifstream tfile(tempfile,ios::binary);00115         <span class="keywordflow">if</span>(!tfile)                                      <span class="comment">//临时文件无法打开,返回失败</span>00116         {00117                 cout&lt;&lt;<span class="stringliteral">"cannot open file"</span>;00118                 <span class="keywordflow">return</span> <span class="keyword">false</span>;00119         }00120     00121         tfile.seekg(0,ios_base::end);                  <span class="comment">//寻找临时文件尾</span>00122         <span class="keywordtype">int</span> cnt=tfile.tellg();                         <span class="comment">//获得临时文件长</span>00123         cnt=cnt-7;                                     <span class="comment">//7字节前导码、1字节帧定界符不用于计算crc但还要加上crc位本身</span>00124         <span class="keywordtype">int</span> cnt2=cnt;00125         tfile.seekg(8);                                <span class="comment">//从第9位开始读取</span>00126         00127         ofstream ofile( outfile,ios::app|ios_base::binary );00128         00129         tfile.read((<span class="keywordtype">char</span>*)&amp;otemp,<span class="keyword">sizeof</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>));00130         <span class="keywordflow">while</span>(cnt&gt;0)                                    <span class="comment">//每次从临时文件中读取一字节,计算,然后写到输出文件</span>00131         {  00132                 00133                 cnt=cnt-1;00134                 <span class="keywordflow">if</span>(cnt!=0)                                 <span class="comment">//非crc位</span>00135                         00136                 {00137                         temp=otemp;00138                         ofile.put(otemp);00139                 }00140                 <span class="keywordflow">else</span>00141                         temp=0;                                <span class="comment">//cnt=0即为crc位,crc位为0</span>00142                 00143                 00144                 <span class="keywordtype">int</span> i=0;00145                 <span class="keywordflow">while</span>(i&lt;8)                                    <span class="comment">//对每一位入寄存器计算</span>00146                 {00147                         oput = <a class="code" href="framer_8cpp.html#a2">crc</a> &amp; 0x80;                       <span class="comment">//取上次计算crc的最高位,此次左移即为输出位;</span>00148                         <a class="code" href="framer_8cpp.html#a2">crc</a> &lt;&lt;= 1;                               <span class="comment">//寄存器左移一位</span>00149                         <span class="keywordflow">if</span> (temp &amp; 0x80)                         <span class="comment">//每次取字节的最高位,作为输入,判断是否为0</span>00150                         {                           00151                                 <a class="code" href="framer_8cpp.html#a2">crc</a> |= 0x01;                         <span class="comment">//非0,则将crc最低位与1取或,即最低为取一,其它位不变,即将1移入</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -