CRC(サイクル冗長コード)検査即ちc++実現


1、循環冗長検査コード(CRCコード、CRC=Cyclic Redundancy Check):データ通信分野で最もよく使われる誤り検査コードであり、情報フィールドと検査フィールドの長さを任意に選択できることを特徴とする.2、CRCコードを生成する基本原理:いずれのバイナリビット列からなるコードも、1つの係数が「0」と「1」の値のみである多項式と1つに対応することができる.例えば、コード1010111に対応する多項式はx 6+x 4+x 2+x+1であり、多項式はx 5+x 3+x 2+x+1に対応するコード101111である.3、CRCコードセット選択の原則:コードワード長をN、情報フィールドをKビット、検証フィールドをRビット(N=K+R)とすると、CRCコードセットのいずれかのコードワードに対して、V(x)=A(x)=xRm(x)+r(x)となるように、R次多項式g(x)が1つだけ存在し、かつ存在する.ここで、m(x)はK次情報多項式、r(x)はR-1次検証多項式、g(x)は生成多項式と呼ぶ:g(x)=g 0+g 1 x 1+g 2 x 2+...+g(R−1)x(R−1)+gRxR送信側は、指定されたg(x)によりCRC符号語を生成し、受信側は、そのg(x)により受信したCRC符号語を検証する.4、cRC検査コードソフトウェアの生成方法:多項式除算によって、その残数は検査フィールドである.たとえば、情報フィールドコードは1011001です.対応m(x)=x 6+x 4+x 3+1仮定生成多項式は、g(x)=x 4+x 3+1;g(x)に対応するコードは、11001 x 4 m(x)=x 10+x 8+x 7+x 4に対応するコードは、10110010000と記す.多項式除算を採用する:得余数:1010(すなわち検証フィールド:1010)送信側:送信フィールド:1 0 1 0 0 1 1010情報フィールド検証フィールド受信側:同じ生成コードを使用して検証する:受信フィールド/生成コード(バイナリ除算法)が除算可能であれば正しく、残数(1010)の計算手順を与える:除算は数学的な意味ではなく、コンピュータのモード二除算、すなわち、除数と被除数を用いて異或演算を行う.異或演算を行う場合、除数と被除数の最高位は位置合わせされ、ビット別異或である.  1011001 0000  -11001  --------------------------  =01111010000  1111010000  -11001  -------------------------  =0011110000  11110000  -11001  --------------------------  =00111000  111000  - 11001  -------------------  = 001010
#include 
#include 
#define MAXLEN 50

using namespace std;

void   main()   
{   
    long i;//long     , 32 bits
cout<>i;
    long generate =6157;//1100000001101
char g_add[MAXLEN];
char s_end[MAXLEN];
itoa(i, s_end, 2);
itoa(generate, g_add, 2);   
char len_g = strlen(g_add);
i = i<= len_g)
{
   temp = generate<