|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
7 y( g, j$ w1 |1 Z#include<IOSTREAM.H>* ^1 O+ p; F- y! K
#include<STDLIB.H>2 l% ?( L% s) Y0 @( H
#include<STRING.H>
5 K- ^& M3 i1 F#define CRC 5
X- _& \# }* H" Z' Q+ ] M5 Achar data[5]={'1','1','0','0','1'};7 l- I4 x" |, X! S( I* d
class Checkout( @6 Y( F3 D5 P% b
{: k% V4 e) q3 c9 w( R
private:
4 e/ O0 P/ Y5 v0 y9 ]$ Mchar ax[50];
+ L0 B$ Z. K0 lchar bx[4];
9 ]# s2 y7 H3 R2 n6 R) }int x;
0 y1 ? z8 C! a& Wpublic:
% Y0 Z7 I5 [6 v) `int length;/ X$ X% m F5 c; \5 _
Checkout(): L8 |, B. z* V5 B- X2 y* F
{ 7 t/ ~* |8 j4 Y! U+ L( x
cin>>ax;
. R9 O+ l! A# x; R6 N" Y+ m length=strlen(ax);* p7 S( }+ }0 F4 C
}
2 y& w& F) i" {7 x/ bvoid cxc();
: k6 G, X* l. @: vbool qyu();
8 p+ }1 Y) b) ~6 |" n( uvoid add();6 v6 J3 ?" f: q' d
};
3 o/ c* M" H( Avoid Checkout::cxc()
9 @* S, ?0 Q! m* M' a{8 o$ J( V( {: M; Q: n" W
for(int i=0;i<4;i++){! J3 l: T+ S3 s
ax[length+i]='0';3 A2 W# S2 j" `" S" q5 j8 t# i5 v" r
}
' M1 {: W7 q! n, f/ J}//将输入序列后加4个0' X6 k' ~1 x& b8 x9 w
bool Checkout::qyu(). m& W0 X9 J& n# `! [0 n2 M
{! J1 s' P& B/ a1 S4 o/ w
char c[5];/ B2 V! Y) H- p% z3 J+ Y: ?0 N
int i,j,n;) L6 O2 q6 n/ X* n5 } W" W5 |) b
int m=5; T( k! P' Y. E; V+ e* v2 S0 C1 k
for(i=0;ax=='0';i++);+ ^! |4 ?2 i. p2 b8 u
if(i==length)! N3 h# k: w; D5 l
{cout<<"余式是0"<<ENDL;9 Z' a( O7 R, `% t1 o
cout<<"发送成功"<<ENDL;+ H1 y) j3 e; Q* e
exit(0);9 G9 x7 c$ [* j5 E" f/ |" S
}8 f5 |+ E+ `4 a4 S0 ~6 B
else{
4 R6 D5 S( I+ @/ _3 J0 c* V. ]& Dfor(i=0;i<5;i++)& [# S0 q: p* \) i" l7 U- g4 [- k
c=ax;
2 Q) J! L8 \' Wwhile(m==CRC): J5 w" `* ^5 |; [/ `
{ for(j=0;j<CRC;J++). t! f4 i) x* \2 F
{
8 V3 _# t2 K6 u/ s0 g if(c[j]==data[j])
6 h+ n" k0 _5 R( R) \) A c[j]='0';
9 Y! K) ?5 x8 Z( N* I: w* D else6 r' ?4 @1 c& ?- u( e! P$ K/ V
c[j]='1';
) `- l# }+ M' O2 Z }
' i$ z6 @2 b) ?1 i* h for(j=0;c[j]=='0';j++);
) S) ~/ Y* N ~( |5 Y n=j;
0 m9 B. n* S; D$ i& T( R for(m=0;m<CRC-N;M++)7 s5 C" f5 f. L8 m! `
{3 O2 B1 @3 @# f$ G# p4 Y0 t
c[m]=c[j];
8 g2 H! ?6 T- J/ P$ f j++;
& z3 m$ c; |3 @/ d. \ }/ I1 U/ ^7 t- u! w9 S( E) ?
while(i<LENGTH&&M<5)0 {: Z( L1 |4 q& l2 U$ \, I, N
{% N% V" ~; H7 Y1 f/ `
c[m]=ax[i++]; ) U# }8 H9 t" z" r' Y, n% d
m++;
* Q9 M5 q% L P7 p8 l$ k }
. Z ?& `1 g2 x" T}' w" o& r' v" j3 _
}( D6 M2 E7 ^8 R$ B) F8 ]- y
int k;. ?+ w0 F8 E3 y9 G1 \
for(k=0;k<M;K++)
7 X* m; j* Y, @: O9 H5 p4 ~* S bx[k]=c[k];
+ q! {* Y( E5 p9 l {0 K3 zfor(j=0;bx[j]=='0';j++);
$ ]: ?; }/ m# E0 _ if(j==m); v7 d9 J6 J% o7 M1 ] w
{cout<<'0'<<ENDL;
. y7 C8 B0 M$ C$ X6 g/ O x=0;# y [% [, s0 G/ }
return true;" ]: \4 j' x* n
}! Y! w+ l: K5 Y) w) u: {( {( K6 T/ ^
else
- q3 n- O4 }9 k4 g6 B+ [ {for(n=j;n<M;N++)
+ H; X, i; k! I8 t5 R cout<<BX[N];0 X% |9 M+ g2 h) b
x=m-j;3 N# j" Z( U8 w" M" z
cout<<ENDL;
: m0 }- f9 {/ z9 p1 Q return false;
6 N+ t" b5 `4 ~6 Z3 o: }5 X. H }
% d$ u8 d2 m9 w& x}
7 l1 c2 q3 \" D* p/ }void Checkout::add()( U8 N4 m, G7 e5 n( x& v0 ?$ k6 A) j/ w
{
' Q# l0 h. Q1 y) c) Mint j=0;& m4 p+ J% t" y7 |4 S N( \& S
for(int i=length-x;i<LENGTH;I++)' y4 R2 u7 q3 Y3 ^0 l
ax=bx[j++];9 E: i- r! M( n6 T: A' Q8 w* p2 j
cout<<"发送的序列加上余数后变成:";
) ^. z7 K- W0 P( }: e4 {for(i=0;i<LENGTH;I++)' x9 I5 d7 I: R7 n3 |7 T
cout<<AX[I];
$ U) I6 c# o9 e. C* p& a cout<<ENDL;
/ L0 }* c6 v) d j}; I; \& A3 _5 }) {: F
void main()
& ~' `2 {$ Y. C& W* h5 Y1 |& K{ # `6 Y0 K5 ?- f& K1 k5 N# B
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; : K- E" Q0 b. f# ~. Q
cout<<"请输入发送数据比特序列:"<<ENDL;
7 M( h- w4 q& m7 x" d6 P Checkout test;* S8 h+ F% w% D9 M/ H2 M6 G/ d
test.cxc();" x8 {0 I$ r* r! T9 @- Z2 K K: P
cout<<"余式比特序列是:";5 {# I2 Y' N1 Y+ b
test.qyu();" \2 B) B0 w$ L3 s
test.add();
, u) A; G6 s1 N/ R" Q/ h cout<<"试试这次是否能被整除."<<ENDL;
7 W3 i! I" o: d3 @( \* I" n9 y cout<<"新余数是:";5 `3 S# `: Q) y% K* S: r( D$ ~
if(test.qyu())9 }; }$ A7 B+ ?7 e! z* J/ f' U
cout<<"已发送成功!"<<ENDL;, Y1 F C' f' `+ [& e; S
else
6 p, B! Q A; v" G* ], m# k cout<<"未发送,失败!"<<ENDL;
, B. J& L# L& b% {}
* b- ]3 [' m! }& c, j[此贴子已经被作者于2005-6-15 20:46:33编辑过]
5 H6 Z5 P g ?1 |2 b4 A( q9 s) i |
|