该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
! S* m0 b3 e/ ~4 E, r, N. x#include<IOSTREAM.H>" c- s7 X7 W0 }3 Z1 T& I
#include<STDLIB.H>
& W7 L8 R _9 T& u# r/ c/ O) R#include<STRING.H>
- _) s- L1 o5 N& e1 t/ r8 J#define CRC 5' Y8 [% t6 ]# J1 x+ p
char data[5]={'1','1','0','0','1'};
* Q( V/ Q2 ]: Aclass Checkout3 E# W& w; y/ l5 E
{$ p* D/ M7 {/ N4 L1 ^8 i, {- c
private:) G* w/ ~3 a ?
char ax[50];: I& t4 A+ d N7 N
char bx[4];
+ @: g/ a! N9 ]( `& C* z' dint x;1 ^4 j5 J ]! y1 y# S
public:
" e/ [1 b. ?: N# c; f( Nint length;
' u N) t, u5 @3 |- SCheckout(). t0 O" q3 [% G+ x6 n8 m% Z
{ 4 J" b4 m8 Y* b. P; e& p# b
cin>>ax;/ g( G" I) h( n, X7 x
length=strlen(ax);$ B" r, q- A. B0 n; T% r- \
}+ g9 `8 m4 n! S* u' |# t$ U, D; o
void cxc();7 V0 p4 g- G; S9 G, P/ k
bool qyu();' i; v% x2 ^6 J% v, U- }% M5 K
void add();$ m; b" M- G+ D! _: M8 c
};
% n% D2 d8 X+ xvoid Checkout::cxc()9 O1 Q# m: `) Q d
{
- `2 q3 m6 M m1 ^$ q" {3 D/ dfor(int i=0;i<4;i++){
4 V* n3 e; f- {( ?+ E, N ax[length+i]='0';
1 ?1 A5 ~2 V2 R/ g/ \}9 U- Z. q& _% q* l8 |% p
}//将输入序列后加4个0
8 _: `1 y1 b; y9 y) u7 n5 z+ J% Mbool Checkout::qyu()
- @8 {* i9 \& X0 x{
& s P5 q5 |, R+ d( Achar c[5];5 a; u2 X& e/ V5 F8 M
int i,j,n;& x; {1 v0 F# q- \7 E8 ~; l
int m=5;6 M- o3 I- I0 ^/ Y
for(i=0;ax=='0';i++);
( i. ?. L) f A+ f2 R if(i==length)
1 r3 \3 U2 v" X1 X$ X0 ~4 q {cout<<"余式是0"<<ENDL;+ ^2 t2 a* `( K6 v7 a
cout<<"发送成功"<<ENDL;. j7 R7 Q9 u$ ~5 h4 [+ N. Z2 I
exit(0);
: |6 \! e; D+ D1 H! {. ]/ i- E }( Q; Y' s9 o6 W) Q, W# G
else{4 \" a6 U- s! c% T
for(i=0;i<5;i++)
W7 r) \: v# ^: G) O c=ax;
, W9 b) ~2 j8 B: Y8 \ a8 rwhile(m==CRC)
/ G3 r/ T1 B, b$ w{ for(j=0;j<CRC;J++)
1 H7 {8 m& m/ i0 b' M% t) h { 3 l& }( a& Q, l, f# i, ^# ^
if(c[j]==data[j])8 O' p$ V4 q b
c[j]='0';, a9 b9 z9 U0 ]8 I
else
+ }* Z' e9 ]9 G+ H r- a5 [ c[j]='1';9 K0 ]$ J% P6 J
}
% a5 g7 D7 j' \& ?/ }. ^7 l for(j=0;c[j]=='0';j++);
6 c, J' S! U1 k0 a* ^& R8 n- O n=j;: n W) j( P: `3 s) e
for(m=0;m<CRC-N;M++)9 s! q) r/ N/ F* }9 Z7 X
{7 h! L7 K& q) a4 O- B* t
c[m]=c[j];0 Z6 h% w, y/ w) C
j++;6 j* v+ w4 O) Q2 f) v) P$ V7 W
}. y/ H. `2 O# @/ @7 t' g( @8 v, u8 b! ]4 _
while(i<LENGTH&&M<5)
, w4 O6 n0 J; P+ P4 P0 C3 L; H {; N3 U1 @6 e* Q7 _
c[m]=ax[i++]; " G$ _$ a3 n5 B6 y0 Q- l6 j
m++; 5 ~" q! Z; {1 \" u
}
2 d" s$ i) R7 b3 K}( E( S0 v) t& f: n) O
}
, Z, ~& u# m: ^4 s8 u7 {' aint k;
6 M/ m# A/ w7 b( vfor(k=0;k<M;K++)
" w C' a) i3 Q0 H' x" w bx[k]=c[k];
3 b. y- k0 k" S) H, i0 jfor(j=0;bx[j]=='0';j++);. z) U) b4 T Q, h& n& ^% K
if(j==m)- R' b6 k+ y" G" v0 M
{cout<<'0'<<ENDL;
: S' P2 p8 t6 R) _9 e x=0;
/ X+ U3 w4 ?1 Q- V' e7 U6 e. a return true;2 F. N& N7 s0 b
}
' a r$ z O* ]% \ else
: f& g! j: C5 S+ I1 ~/ @. x G {for(n=j;n<M;N++)( a6 Z+ b, N; k
cout<<BX[N];* V& h( K0 ^: R* ?1 l: `# H0 h
x=m-j;$ O) Q% L( p% W) D( I b1 P
cout<<ENDL;
8 i L1 n& J' R) D% } W return false;, N3 `4 F5 c( }, H: g9 r
}! i# m* k8 q" i1 Z% K T
}
2 ~! H$ M- B9 s3 z8 X! F$ jvoid Checkout::add()% b5 _! Y2 T& t( Q2 H/ w
{
* w6 O$ d) {7 B- @: Z; jint j=0;% y. b Y2 b7 m0 v
for(int i=length-x;i<LENGTH;I++)
* C1 I" A: J. U+ G ax=bx[j++];
3 q9 c. q5 ^7 |9 f$ D B1 E cout<<"发送的序列加上余数后变成:";
! U2 S; p* Q* f4 h0 G' G( nfor(i=0;i<LENGTH;I++)
0 R8 L" W* I" o4 K" O% `' P cout<<AX[I];
' |" D- N" y$ ^' h/ Z cout<<ENDL;
2 l5 s3 |5 w/ s9 B9 Z7 B" J}, \6 T0 G; `) y0 u; y, T7 U; r5 \2 L
void main()' ~" V7 U0 f/ N( a
{
3 q2 K+ ]8 _2 l: z9 ^cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
/ x N: {- @. c' T cout<<"请输入发送数据比特序列:"<<ENDL;
8 j# s# ^- P. |( l& g Checkout test;" F+ W2 Y; s M
test.cxc();6 R" {$ e3 G3 w+ [8 E
cout<<"余式比特序列是:";
" x3 l1 ~4 e' C: C2 s9 [ test.qyu();9 P' E! D% z9 s% ]3 q
test.add();. @: O' m& y. a
cout<<"试试这次是否能被整除."<<ENDL;
# p+ p; Q" o$ G& i1 v8 n5 Q6 H7 |& ]# g cout<<"新余数是:";
: w* D2 g5 ?7 W# s$ R& k if(test.qyu())* p. c0 f1 _( o# Z
cout<<"已发送成功!"<<ENDL;
I; G# v5 @2 v3 E8 g& @ else
+ D& F$ ?9 Q( _/ `. g cout<<"未发送,失败!"<<ENDL;
8 }; h; ?9 j D' g" \/ t}9 d; b4 h1 a$ f" p, w
[此贴子已经被作者于2005-6-15 20:46:33编辑过]
0 h; @, m( D) ]- h( u |
|