欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      C1 CRC12計(jì)算機(jī)網(wǎng)絡(luò)課設(shè)

      時間:2019-05-14 02:09:17下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《C1 CRC12計(jì)算機(jī)網(wǎng)絡(luò)課設(shè)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《C1 CRC12計(jì)算機(jī)網(wǎng)絡(luò)課設(shè)》。

      第一篇:C1 CRC12計(jì)算機(jī)網(wǎng)絡(luò)課設(shè)

      計(jì)算機(jī)通信網(wǎng)絡(luò)課程設(shè)計(jì)

      C1 CRC-12 校驗(yàn)通信軟件設(shè)計(jì)

      所在學(xué)院: 信息科學(xué)與工程學(xué)院

      專業(yè)班級: 通信工程

      學(xué)生姓名:

      學(xué)生學(xué)號:

      指導(dǎo)教師: 時 間: 2015年9月20

      引言:

      循環(huán)冗余碼 CRC 檢驗(yàn)技術(shù)廣泛應(yīng)用于測控及通信領(lǐng)域,CRC計(jì)算可以靠專用的硬件來實(shí)現(xiàn),但是對于低成本的微控制器系統(tǒng),在沒有硬件支持下實(shí)現(xiàn)CRC檢驗(yàn),關(guān)鍵的問題就是如何通過軟件來完成CRC計(jì)算,也就是CRC算法的問題。CRC碼是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯檢驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長度可以任意選定。

      實(shí)驗(yàn)設(shè)計(jì)要求:

      C1.CRC-12 校驗(yàn)通信軟件設(shè)計(jì)

      環(huán)境要求:Windows/XP/7;C;信息交換內(nèi)容為鍵盤輸入的字符串;通信傳輸通過共享文件實(shí)現(xiàn)

      編碼要求:用模2 除法計(jì)算CRC 碼,生成多項(xiàng)式為CRC-12

      功能要求:能在兩臺計(jì)算機(jī)機(jī)上運(yùn)行程序,一臺產(chǎn)生CRC 碼,另一臺校驗(yàn)。

      課程設(shè)計(jì)目標(biāo):

      用C語言設(shè)計(jì)課程程序,完成用模2出發(fā)計(jì)算CRC碼的CRC校驗(yàn)軟件設(shè)計(jì),1.掌握CRC碼的計(jì)算方法;

      2.掌握用C語言計(jì)算CRC碼的算法;

      3.熟練并掌握C語言在通信網(wǎng)絡(luò)中的編程實(shí)現(xiàn)方式及功能。

      CRC 簡介

      CRC 校驗(yàn)的基本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的 k 位二進(jìn)制碼序 列,以一定的規(guī)則產(chǎn)生一個校驗(yàn)用的監(jiān)督碼(既 CRC 碼)r 位,并附在信息后邊,構(gòu)成 一個新的二進(jìn)制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)信息碼和 CRC 碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯。

      12位的 CRC 碼產(chǎn)生的規(guī)則是先將要發(fā)送的二進(jìn)制序列數(shù)左移 12 位(既乘以2)后,再除以一個多項(xiàng)式,最后所得到的余數(shù)既是 CRC 碼,如式(2-1)式所示,其中 B(X)表示 n 位的二進(jìn)制序列數(shù),G(X)為多項(xiàng)式,Q(X)為整數(shù),R(X)是余數(shù)(既 CRC 碼)。

      12B(x)?212R(x)(2-1)?Q(x)?G(x)G(x)求CRC碼所采用模 2 加減運(yùn)算法則,既是不帶進(jìn)位和借位的按位加減,這種加減運(yùn)算實(shí)際上就是邏輯上的異或運(yùn)算,加法和減法等價,乘法和除法運(yùn)算與普通代數(shù)式的乘除法運(yùn)算是一樣,符合同樣的規(guī)律。生成CRC碼的多項(xiàng)式如下,CRC-12 則產(chǎn)生的是 12 位的CRC碼。CRC-12:G(x)?x?x?x?x?x?1

      接收方將接收到的二進(jìn)制序列數(shù)(包括信息碼和 CRC 碼)除以多項(xiàng)式,如果余數(shù)為0,則說明傳輸中無錯誤發(fā)生,否則說明傳輸有誤,關(guān)于其原理這里不再多述。用軟件計(jì)算 CRC 碼時,接收方可以將接收到的信息碼求 CRC 碼,比較結(jié)果和接收到的 CRC 碼是否相同。

      CRC原理:

      CRC碼為循環(huán)冗余校驗(yàn)碼,基本表示方式為(n,k),其中n為數(shù)據(jù)位數(shù),k為校驗(yàn)碼位數(shù)。CRC碼校驗(yàn)的基本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的(n,k)位二進(jìn)制碼序列,121132以一定的規(guī)則產(chǎn)生一個校驗(yàn)用的監(jiān)督碼(既CRC碼)r位,并附在信息后邊,構(gòu)成一個新的二進(jìn)制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯。采用CRC校驗(yàn)時,發(fā)送方和接收方用同一個生成多項(xiàng)式g(x),并且g(x)的首位和最后一位的系數(shù)必須為1。CRC的處理方法是:發(fā)送方以g(x)去除t(x),得到余數(shù)作為CRC校驗(yàn)碼。校驗(yàn)時,以計(jì)算的校正結(jié)果是否為0為據(jù),判斷數(shù)據(jù)幀是否出錯。CRC校驗(yàn)可以100%地檢測出所有奇數(shù)個隨機(jī)錯誤和長度小于等于k(k為g(x)的階數(shù))的突發(fā)錯誤。所以CRC的生成多項(xiàng)式的階數(shù)越高,那么誤判的概率就越小。

      程序流程圖:

      CRC-12校驗(yàn)方法:

      多項(xiàng)式是0x180D,有13位,crc12本來是12位,16進(jìn)制的0x80D前面補(bǔ)了個1,所以就是13位的。然后我們的信息是一串字符,每個字符8個位二進(jìn)制,假如我們有3個字符,總共有24位。所以我們的運(yùn)算就是先獲取前面13位,這里的前13位二進(jìn)制是指第一位是1的13位二進(jìn)制。這個前13位和0x180D異或后,得到了一個異或結(jié)果,這個結(jié)果除去前面的0,應(yīng)該是小于13位的。這時是不夠13位的,所以我們可以在繼續(xù)往后加二進(jìn)制,假如3個字符,那么總共有24位進(jìn)制,我們還有14到24位這些還沒有加。

      直到最后所有位都已經(jīng)處理好了,得到的結(jié)果就是crc碼。

      文件共享: 將計(jì)算的數(shù)據(jù)存入共享的文件夾中,所以我們必須要先建立一個codecode的文件夾,并設(shè)為共享,將要共享的數(shù)據(jù)存在code.txt文件里。

      fp_crc=fopen(“D:codecodecode.txt”,“w”);

      //打開文件夾 fprintf(fp_crc,“%d ”,len+2);

      //存入數(shù)據(jù)+crc的長度 for(int i=0;i

      fprintf(fp_crc,“%c”,ch[i]);

      //存入字符串 } fprintf(fp_crc,“%c”,(crcnum>>4));

      //先去12位crc碼的前8位

      fprintf(fp_crc,“%c”,(crcnum<<4)&0xF0);//再取crc碼的后4位,然后剩下的補(bǔ)0,使其夠8位fclose(fp_crc);

      //最后存入文檔中

      另一臺計(jì)算機(jī)從計(jì)算機(jī)中的共享文件夾讀取數(shù)據(jù),讀出后數(shù)據(jù)進(jìn)行CRC-12校驗(yàn),若讀出數(shù)據(jù)對生成多項(xiàng)式取余,若余數(shù)為0,則信息傳輸正確,否則信息傳輸錯誤。

      fp_code=fopen(“Pc14codecodecode.txt”,“r”);//共享計(jì)算機(jī)組名為Pc14的codecode文件夾 fscanf(fp_code,“%d”,&len);//讀取長度

      fscanf(fp_code,“%c”,&bb);//讀取長度后一個空格 for(int i=0;i

      fscanf(fp_code,“%c”,&data_t[i]);//按照長度讀取每一個字節(jié) fclose(fp_code);

      int ju=crc12(data_t,len);

      //crc12校驗(yàn),返回

      程序清單:

      發(fā)送端:

      #include #include typedef unsigned int uint;typedef unsigned char uchar;

      /*buf輸入的信息,len信息長度*/ int crc12(uchar buf[],int len){ int wcrc;int i,iq;uchar ir;wcrc=0;///crc碼

      iq=0;//buf字符串下標(biāo),從0到len-1,初始化為0 ir=0;//初始化為0,0到7的變換,while(iq>ir)){ wcrc|=0x01;} if(wcrc>=0x1000)//這里就是判斷哪個最高位是1的13位進(jìn)制數(shù)滿不滿足,滿足就異或0x180D { wcrc^=0x180D;} wcrc<<=1;ir++;if(8==ir){ ir=0;iq++;} } //對后面添加12個0做處理,for(i=0;i<12;i++){ if(wcrc>=0x1000){ wcrc^=0x180D;} wcrc<<=1;} wcrc>>=1;//因?yàn)橐贫嗔艘淮?,所以這里移回來 return wcrc;//最后返回的就是crc12碼 } /*獲取字符串長度的函數(shù)*/ int ucharstrlen(uchar buf[]){ int i=0;while(buf[i]!='