|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
4 ?7 ~8 X9 d1 f2 z#include<IOSTREAM.H>1 N+ r. F6 ~; t# \% W
#include<STDLIB.H>2 x e/ E4 _- b$ r8 c* ^
#include<STRING.H>
2 ^; f+ Z* g. b. S; l$ |2 |4 q#define CRC 5
; T( k ?3 \0 Uchar data[5]={'1','1','0','0','1'};+ @# K/ _& s. b/ O8 q
class Checkout% B1 A, G9 o/ {3 [- `
{
) N: T: u" x8 V' l7 ~: y0 Bprivate:
X9 V7 A+ q+ B1 ichar ax[50];
% B- C: d) \8 Y$ A2 H( [$ y mchar bx[4];2 S5 S; K0 A5 [; c0 Q: h
int x;
* t( b! z B. m9 L/ j4 s: qpublic:
3 c J7 D3 w9 h* I4 ?4 q# X& i0 _int length;/ p4 [. u( ^" [+ A$ Q3 C) j
Checkout()
9 B. A5 F: s7 J( N& Z2 T{
( B/ m) u! u9 @4 r6 b! W cin>>ax;/ A' G- n+ g. l& U" u3 r7 _
length=strlen(ax);) ?5 u' r8 ^( \: C0 w7 e
}1 {6 R" N( T7 I$ ]
void cxc();
: A% \6 ^+ ]! q# }bool qyu();
0 O' ~- q$ _5 c+ g$ a/ ovoid add();
0 z" F5 E3 W7 a$ j* M/ V; ]4 L};
8 s' E9 r& P. M; {, ]8 E, Dvoid Checkout::cxc()8 n- k9 Q3 C7 I" E1 _
{
/ o& d! u2 S( T6 v+ g9 Xfor(int i=0;i<4;i++){
4 m4 Q8 G- Z8 Q+ B u/ b ax[length+i]='0';' W& u5 F% K, x( l! P6 \
}
- m: v3 Q/ Q6 ]) o0 Y+ V0 A}//将输入序列后加4个0* T* D- P, ]) T3 j
bool Checkout::qyu()1 P5 _ c% |5 i* F; }. v+ S
{
8 M, L0 \6 ?$ q2 J$ Qchar c[5];
5 R9 B# m' j" {$ X8 n9 z/ Zint i,j,n; T; ^; Z7 q4 l! t7 r2 R
int m=5;7 E2 ~4 P; D" ]# o# v$ {! G9 ^3 X
for(i=0;ax=='0';i++);
9 h; \- `* m0 L' L5 @$ c if(i==length)6 V# _& C3 v* X5 M! k* b$ O
{cout<<"余式是0"<<ENDL;; K' p: @% z% d$ M( x2 Q2 p
cout<<"发送成功"<<ENDL;
8 C2 u. _3 m4 M/ A0 [ exit(0);
4 F% v) m& R. X$ V: S }! X! N1 n/ [6 K& V8 ^ _
else{% \& I; t) J- G* G1 f+ B G, z
for(i=0;i<5;i++)5 K8 o4 D* F+ U/ ~& F$ Z2 ^' I2 M
c=ax;
' a# Q L, C/ k, \while(m==CRC)
3 l# J9 C+ s$ h) ~* K7 r5 F* h{ for(j=0;j<CRC;J++)8 U( P+ d6 [ C+ e; V" R- I
{ 2 H' f! Y( T& }6 q y9 d, j& ]
if(c[j]==data[j])3 D- O3 s4 V ]7 ^
c[j]='0';2 e& K' o. m* u( k
else7 b1 E5 a7 ]( y# J* ?; N
c[j]='1';
, r8 k* [* U4 b6 Q4 O8 W5 o }. C7 S5 a" c9 Y$ ]) ~) S3 D( E
for(j=0;c[j]=='0';j++);
Y! U3 Y' s6 E n=j; A# H# j- F' n! g% ?! X* `
for(m=0;m<CRC-N;M++)
: t) @8 t' R3 L% r- D @! B/ u {
+ V: i! s k# x8 H c[m]=c[j];
/ ]& C! X, \: R j++;
3 E4 N, M$ A8 ~ t8 Q }
" u, u$ T: E: C$ Z while(i<LENGTH&&M<5). V/ j/ g; ]% o% N, [3 U
{
) U# P9 W0 H( X" A3 m7 C7 j- V0 j! @ c[m]=ax[i++];
9 r$ F0 g& d+ z m++; 9 V! b" C6 j) G% h
}
) o8 N$ N' f! y0 m; l; n}% j$ V) M( q, n- T* M0 `, ~ ]
}
4 e1 h: R! }6 `3 Lint k;" d* O" N6 R' ?$ C2 g+ c L5 J, R
for(k=0;k<M;K++)
6 _( T' E- J' q8 t. `* }6 y; u) \ bx[k]=c[k];3 k0 }0 _8 [0 j; l
for(j=0;bx[j]=='0';j++);
/ j, [# [0 d1 {2 ? if(j==m)
; `5 C# g7 |! V; _8 @4 p {cout<<'0'<<ENDL;
/ E( @ F- h* Q$ |! s! p2 C x=0;
9 K/ d% F# \7 p8 u$ b; d- S return true;
* L6 `' a' a) f1 w }
! R7 z4 \ F3 m8 D else
$ `+ I! N' m5 U9 C; {2 P1 c' q {for(n=j;n<M;N++)
8 t9 J" l$ P7 M$ a' ~# l6 l cout<<BX[N];6 p$ F3 z8 N* R1 X! a- @6 z) _
x=m-j;. I4 z( g: |+ ~- I, W3 d! [* n1 \
cout<<ENDL;
# ^5 j4 a2 d6 R return false;
' e% J/ @. Y- h, m }
# B: D/ Z" q i* X}
6 t f4 \! l! u! Z5 Svoid Checkout::add()- Y8 S/ q( Y. l3 v6 R1 U
{8 a5 s* f* p( b( \7 A
int j=0;
2 C1 F! _5 P( y' f7 U7 H! m for(int i=length-x;i<LENGTH;I++)7 S7 W" s/ w4 I8 q( I
ax=bx[j++];9 b/ S2 T2 T) b+ R% q+ h, e# o
cout<<"发送的序列加上余数后变成:";, d' i, L" x' H8 Q% w) K# H# [0 R
for(i=0;i<LENGTH;I++)
& N9 ^: W% T( t4 [ cout<<AX[I];
* o6 x% T! `" s/ P cout<<ENDL;
, Z& l( U& z3 h2 i' e8 z}' C! Z6 A8 h4 \" u5 A
void main(). u0 l7 C: c( a5 v
{
3 a+ _$ C! _" F9 ?+ Scout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; ( V9 X. e/ ~& w2 D% A# W: F
cout<<"请输入发送数据比特序列:"<<ENDL;
0 z- g: F8 N0 f1 V* E Checkout test;
& U7 r: N* y' S7 \5 Ctest.cxc();0 i) a+ [9 w: \ l3 a
cout<<"余式比特序列是:";
0 K, e! h7 I. H: f# g: w* A4 u test.qyu();
?* q7 H$ y4 S! ~$ R/ v) N" j! n6 {; \4 N test.add();/ b' n$ {* Z" c# H' h, c8 W u
cout<<"试试这次是否能被整除."<<ENDL;
% O' v9 o( ?) V! e# j cout<<"新余数是:";
& [" a0 t% ^' q9 T- ^6 X if(test.qyu())
$ F) G4 {2 p4 |+ e' X cout<<"已发送成功!"<<ENDL;. N( P, L: _& D# _
else
$ J/ J7 t8 a) E7 v5 F cout<<"未发送,失败!"<<ENDL;
$ W1 R) |# c" Z4 p0 J! J1 Y}
5 N: _- p5 F, E$ N' h' O[此贴子已经被作者于2005-6-15 20:46:33编辑过] 2 J R1 H: U0 V _ s% l
|
|