資源簡介
1、循環(huán)校驗碼(CRC碼):是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。
2、生成CRC碼的基本原理:任意一個由二進制位串組成的代碼都可以和一個系數(shù)僅為‘0’和‘1’取值的多項式一一對應(yīng)。例如:代碼1010111對應(yīng)的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應(yīng)的代碼101111。
3、CRC碼集選擇的原則:若設(shè)碼字長度為N,信息字段為K位,校驗字段為R位(N=K+R),則對于CRC碼集中的任一碼字,存在且僅存在一個R次多項式g(x),使得
V(x)=A(x)g(x)=xRm(x)+r(x);
其中: m(x)為K次信息多項式, r(x)為R-1次校驗多項式,
g(x)稱為生成多項式:
g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR
發(fā)送方通過指定的g(x)產(chǎn)生CRC碼字,接收方則通過該g(x)來驗證收到的CRC碼字。
4、CRC校驗碼軟件生成方法:
借助于多項式除法,其余數(shù)為校驗字段。
例如:信息字段代碼為: 1011001;對應(yīng)m(x)=x6+x4+x3+1
假設(shè)生成多項式為:g(x)=x4+x3+1;則對應(yīng)g(x)的代碼為: 11001
x4m(x)=x10+x8+x7+x4 對應(yīng)的代碼記為:10110010000;
采用多項式除法: 得余數(shù)為: 1010 (即校驗字段為:1010)
發(fā)送方:發(fā)出的傳輸字段為: 1 0 1 1 0 0 1 1 0 10
信息字段 校驗字段
接收方:使用相同的生成碼進行校驗:接收到的字段/生成碼(二進制除法)
如果能夠除盡,則正確,

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Text;
namespace?CRC
{
????public?class?CRCModbus
????{
????????public?byte[]?crc_table=new?byte[512];
????????#region?構(gòu)造對應(yīng)表
????????///?
????????///?構(gòu)造對應(yīng)表
????///?
????????public?CRCModbus()
{
crc_table[0]?=?0x0;
crc_table[1]?=?0xC1;
crc_table[2]?=?0x81;
crc_table[3]?=?0x40;
crc_table[4]?=?0x1;
crc_table[5]?=?0xC0;
crc_table[6]?=?0x80;
crc_table[7]?=?0x41;
crc_table[8]?=?0x1;
crc_table[9]?=?0xC0;
crc_table[10]?=?0x80;
crc_table[11]?=?0x41;
crc_table[12]?=?0x0;
crc_table[13]?=?0xC1;
crc_table[14]?=?0x81;
crc_table[15]?=?0x40;
crc_table[16]?=?0x1;
crc_table[17]?=?0xC0;
crc_table[18]?=?0x80;
crc_table[19]?=?0x41;
crc_table[20]?=?0x0;
crc_table[21]?=?0xC1;
crc_table[22]?=?0x81;
crc_table[23]?=?0x40;
crc_table[24]?=?0x0;
crc_table[25]?=?0xC1;
crc_table[26]?=?0x81;
crc_table[27]?=?0x40;
crc_table[28]?=?0x1;
crc_table[29]?=?0xC0;
crc_table[30]?=?0x80;
crc_table[31]?=?0x41;
crc_table[32]?=?0x1;
crc_table[33]?=?0xC0;
crc_table[34]?=?0x80;
crc_table[35]?=?0x41;
crc_table[36]?=?0x0;
crc_table[37]?=?0xC1;
crc_table[38]?=?0x81;
crc_table[39]?=?0x40;
crc_table[40]?=?0x0;
crc_table[41]?=?0xC1;
crc_table[42]?=?0x81;
crc_table[43]?=?0x40;
crc_table[44]?=?0x1;
crc_table[45]?=?0xC0;
crc_table[46]?=?0x80;
crc_table[47]?=?0x41;
crc_table[48]?=?0x0;
crc_table[49]?=?0xC1;
crc_table[50]?=?0x81;
crc_table[51]?=?0x40;
crc_table[52]?=?0x1;
crc_table[53]?=?0xC0;
crc_table[54]?=?0x80;
crc_table[55]?=?0x41;
crc_table[56]?=?0x1;
crc_table[57]?=?0xC0;
crc_table[58]?=?0x80;
crc_table[59]?=?0x41;
crc_table[60]?=?0x0;
crc_table[61]?=?0xC1;
crc_table[62]?=?0x81;
crc_table[63]?=?0x40;
crc_table[64]?=?0x1;
crc_table[65]?=?0xC0;
crc_table[66]?=?0x80;
crc_table[67]?=?0x41;
crc_table[68]?=?0x0;
crc_table[69]?=?0xC1;
crc_table[70]?=?0x81;
crc_table[71]?=?0x40;
crc_table[72]?=?0x0;
crc_table[73]?=?0xC1;
crc_table[74]?=?0x81;
crc_table[75]?=?0x40;
crc_table[76]?=?0x1;
crc_table[77]?=?0xC0;
crc_table[78]?=?0x80;
crc_table[79]?=?0x41;
crc_table[80]?=?0x0;
crc_table[81]?=?0xC1;
crc_table[82]?=?0x81;
crc_table[83]?=?0x40;
crc_table[84]?=?0x1;
crc_table[85]?=?0xC0;
crc_table[86]?=?0x80;
crc_table[87]?=?0x41;
crc_table[88]?=?0x1;
crc_table[89]?=?0xC0;
crc_table[90]?=?0x80;
crc_table[91]?=?0x41;
crc_table[92]?=?0x0;
crc_table[93]?=?0xC1;
crc_table[94]?=?0x81;
crc_table[95]?=?0x40;
crc_table[96]?=?0x0;
crc_table[97]?=?0xC1;
crc_table[98]?=?0x81;
crc_table[99]?=?0x40;
crc_table[100]?=?0x1;
crc_table[101]?=?0xC0;
crc_table[102]?=?0x80;
crc_table[103]?=?0x41;
crc_table[104]?=?0x1;
crc_t
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????24576??2008-08-19?18:45??CRC\bin\Debug\CRC.dll
?????文件??????17920??2008-08-19?18:45??CRC\bin\Debug\CRC.pdb
?????文件??????24576??2008-08-23?00:07??CRC\bin\Release\CRC.dll
?????文件??????17920??2008-08-23?00:07??CRC\bin\Release\CRC.pdb
?????文件???????1946??2008-08-06?14:43??CRC\CRC.csproj
?????文件??????15113??2008-08-06?15:06??CRC\CRCModbus.cs
?????文件????????246??2008-08-23?00:07??CRC\obj\CRC.csproj.FileList.txt
?????文件????????303??2008-08-07?09:51??CRC\obj\CRC.csproj.FileListAbsolute.txt
?????文件??????24576??2008-08-19?18:45??CRC\obj\Debug\CRC.dll
?????文件??????17920??2008-08-19?18:45??CRC\obj\Debug\CRC.pdb
?????文件??????16384??2008-08-11?16:38??CRC\obj\Debug\Refactor\CRC.dll
?????文件??????24576??2008-08-23?00:07??CRC\obj\Release\CRC.dll
?????文件??????17920??2008-08-23?00:07??CRC\obj\Release\CRC.pdb
?????文件???????1301??2008-08-06?14:37??CRC\Properties\AssemblyInfo.cs
?????目錄??????????0??2008-10-17?18:27??CRC\obj\Debug\Refactor
?????目錄??????????0??2008-10-17?18:27??CRC\obj\Debug\TempPE
?????目錄??????????0??2008-10-17?18:27??CRC\obj\Release\TempPE
?????目錄??????????0??2008-10-17?18:27??CRC\bin\Debug
?????目錄??????????0??2008-10-17?18:27??CRC\bin\Release
?????目錄??????????0??2008-10-17?18:27??CRC\obj\Debug
?????目錄??????????0??2008-10-17?18:27??CRC\obj\Release
?????目錄??????????0??2008-10-17?18:27??CRC\bin
?????目錄??????????0??2008-10-17?18:27??CRC\obj
?????目錄??????????0??2008-10-17?18:27??CRC\Properties
?????目錄??????????0??2008-10-17?18:27??CRC
-----------?---------??----------?-----??----
???????????????205277????????????????????25
評論
共有 條評論