该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
" g, P. e8 o' T3 g- I7 w) R+ E#include<IOSTREAM.H>7 r/ Z8 f {2 ^; w
#include<STDLIB.H> J D' A+ Q7 z
#include<STRING.H>
/ h# \5 P2 P" E' \#define CRC 5
& r3 _, c3 O2 L, m9 N) Tchar data[5]={'1','1','0','0','1'};/ Z% z- O% j7 M1 u6 I* m) T
class Checkout: M7 ]7 z! e |& j
{7 p. U" Y, r# M4 E
private:/ U. T8 B" I& K: ^
char ax[50];: A& E5 m: C, L, U" o
char bx[4];
$ ^% a# n$ Y1 I1 D0 s! ]. \' kint x;
+ I. t, h- l N# A7 Rpublic:
0 g* E0 L' `; h8 o0 Jint length;
5 B+ h1 K8 s- M* T$ T; jCheckout()2 }$ x4 h( r8 {, b# |2 _
{ 3 c+ ?' x+ G* @
cin>>ax;
8 {) u- e3 O1 X# m Y length=strlen(ax);
* R; G3 N% H! H) _}
" b1 b. P* A" ]void cxc();
+ h5 P5 U1 \$ E4 Abool qyu();
& U; L6 q9 x1 X5 x. qvoid add();- P$ s8 r. U% y( C( ?3 c
};6 q8 n D' f/ R0 m9 G- P
void Checkout::cxc()
: p( y4 i7 m) g8 L4 }# U0 X$ y{
7 I t) f* K. i) a' O6 K8 Z; s# ^for(int i=0;i<4;i++){9 n9 x( D5 R3 \6 R2 w4 w X
ax[length+i]='0';6 i, m0 y: y3 s. J+ }- \* x8 o/ l
}
0 }3 Q x# r2 v& ?. I. R: G2 S/ L! ^}//将输入序列后加4个0& t' W9 j& X: _1 V; {' P( N% Y
bool Checkout::qyu()
+ G% }, @2 }; |- k{: i9 H) F# \! U# B
char c[5];6 V' s, g$ n, u/ V7 W. p7 q6 q
int i,j,n;
% n- h, @" y+ n, U m& {0 p Nint m=5;9 r r2 T, Q- U
for(i=0;ax=='0';i++);" @( q, E% X# J X; n2 M
if(i==length)
/ C: v6 p. d+ n {cout<<"余式是0"<<ENDL;* c2 d/ C, _ ?+ k, a
cout<<"发送成功"<<ENDL; f7 W0 E# m' O8 d! ]' k
exit(0);- [4 ]" m% C. d. q1 U; h' U
}
: B' t* `2 t* k5 `+ L3 Zelse{, E/ C' \, f9 I3 h: R+ B: L
for(i=0;i<5;i++)
$ J- w# A# d& { c=ax;
Y+ |' Z- c m0 [" uwhile(m==CRC)1 {/ _$ g3 L. O# @1 x. K5 j
{ for(j=0;j<CRC;J++)
- o. Y" Y! R3 f0 w" j3 k+ X, m) W { . W9 g+ `: b( G1 e. N
if(c[j]==data[j])
1 `6 N ], L, m& J/ g, V1 h0 J c[j]='0';: C* e( L8 ^1 d- ^- |& a, {- Y
else
8 u: {! p& ]! a, P! o' {. K& H c[j]='1';
( \7 U8 g1 v8 ? q }
4 Z a3 r B' ?- y' P: K for(j=0;c[j]=='0';j++);/ {% ?% F7 R" p6 G2 t
n=j;
# H% r: ~' z, [. t4 L7 w% w- q3 s for(m=0;m<CRC-N;M++)
" L& R2 `( ^. I# \ {" U1 J, V. }8 B3 M) D
c[m]=c[j]; r: P! d# M o# s* z9 D
j++;
8 p( e3 l' i a+ O } W! f5 r7 B" Z" E
while(i<LENGTH&&M<5)- G7 Y. A) l( [% N! Y4 O. J
{
+ M3 z4 c3 Y4 G c[m]=ax[i++];
1 i1 j" |. D- A0 G' ^0 A m++;
2 A. k- R+ S7 T! O+ y3 x }- a! f" U! M3 N) j, G
}' R: n9 }) o1 z9 R1 [& L) v/ l
}
# h: L, Y0 o! n3 O' Fint k;1 y, v( `) \3 }0 U( r4 _
for(k=0;k<M;K++)
+ ?2 J8 O2 z8 S a# ]& e" {5 L2 l bx[k]=c[k];
7 }9 F0 u d4 L. g9 @0 g zfor(j=0;bx[j]=='0';j++);
( d% K8 U8 f! |! Z% O+ I& w! C" U7 o0 O if(j==m)1 T7 }$ D: e8 V9 }; O5 Z
{cout<<'0'<<ENDL;
6 S8 X6 u( ^/ q% O x=0;; Q7 {! q6 c1 t) R
return true;0 T, E5 [* n0 F$ B
}
7 H- z5 ]& u# ?; ~. G else
}0 i" f% [3 S- L Y/ l e$ J2 a {for(n=j;n<M;N++)
" J9 z6 ?2 m0 v cout<<BX[N];; x7 y& l- q" U+ @ q! P/ E
x=m-j;
. b# C0 k% d W v cout<<ENDL;
* |) ~& M5 ?" l5 o/ C return false;
% v/ q0 U$ v1 m' E6 p9 A }! L( p I4 e! v1 s( N
}
* l: G& A9 a: A/ r! [* hvoid Checkout::add()9 `8 @$ M+ W8 Z0 r- _9 G
{' M' g: m$ G; x7 k
int j=0;! i. K1 i4 G! j( `4 M
for(int i=length-x;i<LENGTH;I++)7 a) k( U7 l' N1 M2 p! n* F0 ]
ax=bx[j++];$ T' i4 K1 Y; N! @, g8 @8 r5 T
cout<<"发送的序列加上余数后变成:";& `% i% L( s6 c( z4 G1 q
for(i=0;i<LENGTH;I++)) h( W+ I" n `1 n! p
cout<<AX[I];7 i4 e( c2 j, [) O
cout<<ENDL;
# K5 m$ f* @) m0 E}
# k% r3 c- C0 T0 svoid main()' r! Q$ }& b& ~ I0 R p
{
' F }8 X: w* N |- P' Scout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
2 s7 V% U& `0 O. ~& v4 b cout<<"请输入发送数据比特序列:"<<ENDL;
- k) a9 `8 b6 N- w, I; s6 ^ Checkout test;
* O+ `: O/ I$ Z/ Ntest.cxc();" r% k( D# C, `; R
cout<<"余式比特序列是:";0 R3 l( P v% d% O! O! e
test.qyu();
E1 O4 o* d2 A test.add();/ E% ~7 E. s; K9 \+ i' G
cout<<"试试这次是否能被整除."<<ENDL;: |1 Q; c$ j/ n6 n
cout<<"新余数是:";
/ ?9 x- B; S5 z3 B1 h% Z if(test.qyu())
& {, k. p9 m$ X n7 b cout<<"已发送成功!"<<ENDL;! C& L1 }" N: T) V- j
else0 R, H l2 y( d% H" [/ m
cout<<"未发送,失败!"<<ENDL;
( s% S! l8 K( b" G# a}( g! v& z% S0 a8 I B1 ?0 H% C
[此贴子已经被作者于2005-6-15 20:46:33编辑过] % ~; e% Q, g1 n7 F( d; p3 R
|
|