|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊9 [0 _1 [, v9 @; E! Q' o8 n
#include<IOSTREAM.H>
, Z- ]2 J1 y( B#include<STDLIB.H>4 I' w; |. J1 J9 c t W6 s
#include<STRING.H>' a9 n- B1 T% s6 H& k6 \5 w, e
#define CRC 54 l n4 @/ D& M" i0 y" Q
char data[5]={'1','1','0','0','1'};
( g x% S5 v' }8 u7 h+ J3 Jclass Checkout
, B5 u! v1 I( m4 d9 C{5 V4 y! A0 d" r9 {* m
private:9 n, ], L3 F8 O2 ^- I' c. i
char ax[50]; F8 Y, C1 `. j8 f
char bx[4];' W/ o% P6 p5 {# I) A
int x;
+ t% H1 D$ M( v: C- b' t& q0 zpublic:: \- q3 m7 l# i& R3 n4 H
int length;
9 X0 O4 u$ n! J' U6 dCheckout()0 ^! A4 R, I) @/ q
{ ) o8 n0 d7 o# n4 h: K/ V
cin>>ax;
9 Q9 b6 N9 b2 P3 T7 V length=strlen(ax);" d3 A. l7 S# @* w
}
$ z3 U% a( r" e# ovoid cxc();& d8 g# {; h& N* \% C0 U
bool qyu();
, M3 e# F( i ]) h9 Gvoid add(); W/ W! I% d: B8 j
};2 Z4 T F9 c$ l5 |( K. B9 Y% X# T
void Checkout::cxc()
& _7 I+ J& r% |( i9 z/ e% [{
" `) _$ p# {' u/ b" Nfor(int i=0;i<4;i++){& P) R: r# O2 k
ax[length+i]='0';/ |5 Y& u/ X! ]" t! @
}$ m6 c, ]: x! |
}//将输入序列后加4个0
; ^& | ^/ V1 p5 K* l9 I" pbool Checkout::qyu()9 d, {- {3 W, X" w8 |1 {
{
( a( j. L( M5 s8 F2 C! ^- Achar c[5];/ F. Q8 J/ D6 l/ ~7 P
int i,j,n;
# S. w- |+ E9 D; A9 i. eint m=5;
- Z( ]4 f; W0 [$ T/ m7 Cfor(i=0;ax=='0';i++);
. m! I: u5 B) m% w6 j if(i==length)
0 |; V/ g& q( R/ u1 W {cout<<"余式是0"<<ENDL;
% z1 Q* `. E0 U cout<<"发送成功"<<ENDL;7 S: `% ]- q# _5 r% ]8 v* f
exit(0);0 ~: j+ S1 O4 B9 R
}
# g% |% x' s5 I7 z; I! I0 celse{6 ^* P8 D- ? d8 Y# H
for(i=0;i<5;i++)$ W6 U' J: z) t! W( w, _: h) k
c=ax; j$ C/ ~* a9 W. e; `
while(m==CRC)+ N& I/ C$ d4 e Z# t+ m
{ for(j=0;j<CRC;J++)
/ i: J: x2 Y6 B: S {
O n, | F* \& ]; I' E if(c[j]==data[j])
[$ v; K- D' W2 F/ l c[j]='0';3 _! B) y' Z5 n) K9 D
else4 h3 ?/ r* ^5 S, j( t* e% V
c[j]='1';2 d$ d" F+ F1 u1 d, t
}
0 n4 S; q. a* ~2 G& {. o for(j=0;c[j]=='0';j++);: l3 l; e2 F4 e0 i- v
n=j;
. G$ t9 D% d3 e0 M- I for(m=0;m<CRC-N;M++), U x+ G( y7 |/ F! |1 l
{1 L. N( Y1 h3 U3 ?+ H% u% I0 D
c[m]=c[j];
! E9 g1 x4 c, b/ `8 K" W* \. `5 _ j++;8 N0 B! h% H K
}3 z3 q' O- m9 Z: L/ ?4 e$ z; u$ r& P
while(i<LENGTH&&M<5)
) F7 }( z9 ]3 P- t0 h {5 t/ H/ y' y; d
c[m]=ax[i++];
0 o7 Z1 J. F8 M& x& ]6 C m++;
E% c/ F5 y) Y; ~ I# O5 ? }" q) q6 ^+ K J$ E
}
$ @) }( Y$ l, _/ u8 F! S}7 p$ W; L+ W9 i9 C
int k;* E# Z- v' T: X1 |+ L
for(k=0;k<M;K++)) \( R8 \! W$ H# o$ b" x8 i7 w0 R
bx[k]=c[k];8 \( V$ e+ i; x1 d8 z
for(j=0;bx[j]=='0';j++);" F4 Y$ ]) f) j8 l
if(j==m)% k) X; u) Y! A; @% N* N) y
{cout<<'0'<<ENDL;
7 c3 ?/ O, T( \6 J3 s$ R& B1 @ x=0;
5 C6 u, h: W6 a9 V; d# y- m return true;
z& ]. ^0 O; y5 s* s0 t- [( ` }
' \( G2 y) t5 Q else* T2 z/ z' p: v! K
{for(n=j;n<M;N++)# l8 d4 ]2 U# ~7 I
cout<<BX[N];
7 j5 B7 a& g" T- R& b' G x=m-j;
- K+ k }0 E/ x2 \3 `0 B, g cout<<ENDL;
$ o% M0 G$ b! R$ ]5 H return false; J6 L( r- R1 h0 A/ `* `6 Y
} L6 |) g3 V4 V
}4 q1 \+ k) }& |9 i; W* ~
void Checkout::add()
7 o" R/ }4 c( b M{
, T2 { ~# H; `* f& n u, fint j=0;
" J; L- `1 K) ~ for(int i=length-x;i<LENGTH;I++)
# ?9 C) h9 J, w' C3 [3 Z ax=bx[j++];
- _, i6 h S1 }2 }3 {2 C! |( J cout<<"发送的序列加上余数后变成:";
$ r- l+ G/ j6 ^# O& d9 Ifor(i=0;i<LENGTH;I++)
. L. t( m N D+ k; l! o cout<<AX[I];
" j1 J+ b/ [( a9 w5 H$ s cout<<ENDL;
+ l4 t, M4 O* H1 E2 U2 s}8 o4 J3 j* ^/ W/ B4 b
void main()
, ?( B2 `) S5 j. Z; U3 n+ S{
( U8 V) K% P0 ?* L' t# `; C5 w/ scout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
% t$ V1 m9 t& `% t cout<<"请输入发送数据比特序列:"<<ENDL;$ c5 A! a- x) l f3 I
Checkout test;7 q9 W1 C9 E5 H0 h
test.cxc();+ s1 l+ Y+ ?; s. P. }0 v$ _* b2 Y" D
cout<<"余式比特序列是:";
, c8 n. g6 P, _; ] test.qyu();+ P" x2 s" e3 B# Y1 X
test.add();
, S5 V6 [0 [$ E) n. ] cout<<"试试这次是否能被整除."<<ENDL;7 @+ O) s% D' I$ e
cout<<"新余数是:";
2 `* U( n1 @, B if(test.qyu())7 J5 M# x; q! G# |4 p6 ]$ ?4 F. L
cout<<"已发送成功!"<<ENDL;/ o8 @8 m8 l9 U! b
else
6 {6 I% v1 _! h4 } cout<<"未发送,失败!"<<ENDL;6 {' ~2 ~$ {* [& [5 \ o3 u
}( { ]; k W( c) X- g) P5 E
[此贴子已经被作者于2005-6-15 20:46:33编辑过]
% M" V7 r4 ?" u- V3 u# o |
|