该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
3 v! g1 j; F: g# u" X/ B#include<IOSTREAM.H>
A! x1 c9 R2 [2 v4 M! k) ]7 p#include<STDLIB.H>$ e+ A0 ]7 [' C5 t) R+ e% @$ e
#include<STRING.H>: {1 e6 M: ^) j! ^2 U
#define CRC 5
" r2 q$ w: ~" Z; U+ b% echar data[5]={'1','1','0','0','1'};
' L3 n& {! m9 R) x; T9 eclass Checkout& F" v8 Z1 f& [0 P2 B" |
{9 `# P7 Z& T! x: Y# R
private:' a) t0 E& N0 x
char ax[50];- c9 f# p' B: ?) W6 p3 w# W
char bx[4];& \. C) D2 g, o# N* r7 g
int x;
8 `) U( p9 v- X: O4 Ppublic:
! a, K& g! W& ^3 Hint length;
4 o! s1 I; Y/ C# {2 A3 sCheckout()
) a, I$ l a+ p, ?# y{ 4 ?2 T# j* ]5 U9 d/ I" S8 e
cin>>ax;
+ y0 E! v* Y8 S6 J length=strlen(ax);1 d/ x) V5 D! d7 u
}+ R/ I' M5 I* k8 m0 f) S
void cxc();
$ C# V4 W* M4 @2 Hbool qyu();
% Z) y8 a3 {7 Yvoid add();
0 m, H8 t$ _/ | _};
) Y1 i/ F! g( X. r2 jvoid Checkout::cxc()
; r& e& V$ l" L0 [: d: R% S! c{
: G: y! P! k6 C7 g2 }1 V- a5 l4 Nfor(int i=0;i<4;i++){
0 @! ]- W% g; V: m* W% h3 x! d. \! U ax[length+i]='0';
* Q5 ~' R- D v}
% S3 d1 j8 y3 ?- C( J, X; j+ M}//将输入序列后加4个0
; o, V& Y n8 u, i6 Nbool Checkout::qyu()0 d( [7 y7 T8 v. n4 g+ m/ H7 l
{4 K' o P, l: p0 F
char c[5];
* U# S* [9 W* u- s; o; iint i,j,n;
/ Q) W0 m1 ?' ]3 u) H! ~% i+ kint m=5;' K0 h# r0 T. M4 r
for(i=0;ax=='0';i++);
# r) Y% j: j: p) q" F/ Y5 R4 J if(i==length)4 l; X/ [6 O7 K5 b; ^5 E
{cout<<"余式是0"<<ENDL;
; t" O: N, d1 n3 C* U: ` cout<<"发送成功"<<ENDL; \7 p7 ^4 M4 z8 O% p7 U- {2 r8 P# P
exit(0);, q% N: {5 P# c- {+ C$ \) m. p/ m
}9 r8 H/ V1 A4 C" G; }+ z
else{
# K! m9 F$ x+ d2 M! ~4 W7 K0 jfor(i=0;i<5;i++)% V* z; F3 M9 H7 W- y& u
c=ax;% b4 L& F6 I* Z/ i4 _0 u
while(m==CRC). u: F7 p# m! U% s E) a
{ for(j=0;j<CRC;J++)0 ]7 e+ B" e7 u8 y- T8 Z
{ 9 }8 t5 r; H$ b$ K C ~% ^% r
if(c[j]==data[j])6 g7 Y9 m# M' ~* i. {- _- c) ?( D
c[j]='0';: O; w- Q4 Z6 R( T! B9 t& w7 Y
else
* {# b. E2 C. ?( e; R+ M c[j]='1';
* ^* e* C8 K2 [4 Z2 c1 U; P* m! [0 _- }$ D }
' ^0 ~: T$ H7 f8 r for(j=0;c[j]=='0';j++);. ~2 S6 ]. U1 \, [0 Q9 v
n=j;
1 [7 F: C N8 f0 V8 w7 _* a4 L for(m=0;m<CRC-N;M++)
: d a8 Y! u q: F {! r, V& X8 M/ ]. v# M% p
c[m]=c[j];
' ? j% s7 _; ~# }- P j++;% j4 \3 _- m# L1 x5 g: U! ^
}" C" j2 `6 ~( u, J# g8 E( n
while(i<LENGTH&&M<5)
7 H5 q" R6 S, a7 a1 x {8 q& [$ C6 M2 n( ]3 U. h. k
c[m]=ax[i++];
. I5 j; p8 A( H& u$ u; I m++; 4 f& g5 r9 D) j- h" Z4 c
}4 Z" d, U4 A9 m5 G$ P9 }
}
% o& d" ]' y5 N( E! b2 O5 x}
4 g- Z! P2 w6 `+ jint k;7 E' G( ]# ~1 _! [
for(k=0;k<M;K++)
' F; {8 H5 d6 d' L* b' ], g& _ bx[k]=c[k];0 X4 u! V/ `0 m
for(j=0;bx[j]=='0';j++);; r5 [$ I7 [3 Z4 _0 K
if(j==m)
2 t4 t6 W0 j( Y' Z2 a {cout<<'0'<<ENDL;
( D4 j% p; G' r- L3 q x=0;! o/ ^; U+ {8 B; }6 f; I
return true;5 }+ |1 i/ |0 i% w: d( z; N( N& K
}
. i# z# G8 m( |+ J" n# w. L6 Q else3 n9 i/ B2 y7 O# p- M
{for(n=j;n<M;N++)9 @" t5 [ j+ r( ^' Y" @; { z
cout<<BX[N];% Y: W, v* H2 m1 @; L: `0 |2 F
x=m-j;
! L0 L, U' [5 G cout<<ENDL;% l5 @6 |7 B/ ^' g. G2 s
return false;& S4 p: K+ j2 u" T$ I8 x8 T9 F V0 T
}
$ @6 w& l2 B- O}
+ s" m$ v C3 t% ` V5 w( o1 H$ @void Checkout::add()" z( w7 @+ J5 h, u$ L& I
{& h- E* z( x( `" B
int j=0;! O+ f2 Y- D/ T0 n; V
for(int i=length-x;i<LENGTH;I++)
* X$ G/ `$ t/ O' a ax=bx[j++];
1 p7 _& a8 M ]9 V5 q; G6 u4 E' L cout<<"发送的序列加上余数后变成:";
( @2 B4 x4 l6 \0 ifor(i=0;i<LENGTH;I++)# Y Y. \+ e6 ~
cout<<AX[I];) ?, y- i! d! I
cout<<ENDL;8 W! v& O2 l2 V2 E* h$ h
}
' G+ o Z" T5 T) I! Nvoid main()
) @- l6 ?) d R7 G{ 5 S+ u, ?0 ^2 L0 ]
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
) h) y( ^$ ^) E6 k cout<<"请输入发送数据比特序列:"<<ENDL;& g2 I7 m' b/ x: s
Checkout test;
. q+ [/ }; H6 G: n- gtest.cxc();" U2 ~6 Q8 p1 ]/ n' ]
cout<<"余式比特序列是:";
7 N4 m+ W& @; I test.qyu();) S% H8 y1 V) v" [( n# N
test.add();) U1 M: `+ r' v- @$ b; q
cout<<"试试这次是否能被整除."<<ENDL;: c: L; I: H( V' F- E
cout<<"新余数是:";
+ e z3 {& T& s5 h if(test.qyu())
" }* P% J- X& ^2 H3 ~& ?; ?! a cout<<"已发送成功!"<<ENDL;/ e9 e. u. ?6 y f& {! Q
else5 @) s/ I; H- B0 N0 t6 g4 }2 i- ^
cout<<"未发送,失败!"<<ENDL;1 U& z. R# d% @* W) ]1 s; W7 Z
}
$ S4 n6 b* G& |) b8 {2 b Y' k g[此贴子已经被作者于2005-6-15 20:46:33编辑过] - C9 [5 c* \+ [& T( N, K
|
|