|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
, x+ K) |9 f# Q7 A2 P1 M: `8 {3 q0 L#include! F4 L0 ]# e+ A7 n4 A+ r8 q# c
#include
) M" J) e% F3 h' s5 g m#include
' E, ~4 D9 k9 H5 k#define CRC 5! G( w1 C5 t: s% F( v$ K5 {1 }
char data[5]={'1','1','0','0','1'};; n1 C1 v9 ]6 k4 E% y: v( N: G1 \0 `
class Checkout
k) m- E1 F8 R9 k{
" G% G' v% c4 a4 ]3 i) {' iprivate:
Y, P% c5 d* E( O" D char ax[50];9 o' M: d4 L# D) [6 y0 r
char bx[4];$ m, ]- h: x) L
int x;
4 x- h# g- P, L/ epublic:
3 ], W& h' v% Z6 f& t6 v% S int length;
9 s/ P' N1 ?# o( F; v% R9 } Checkout()
5 K1 ]0 `0 v' }, Z {
! e, s/ w5 G& G3 K cin>>ax;. V! l: G4 Q8 F6 n6 v1 O
length=strlen(ax);' c* E5 b9 X4 N1 c" S) G
}
2 m3 t! G5 V. n: i) A& q% Z void cxc();+ z; T- d3 j3 \- U
bool qyu();
4 \4 G8 z# |% `. A# f void add();$ t% O6 z. i- g/ C
};
9 S: X5 k* b1 `/ |$ k& xvoid Checkout::cxc()
1 A$ m8 G* i ?2 t U9 o{' s5 m+ H1 c2 @3 Z( p; T
for(int i=0;i<4;i++){7 d# U1 [4 A w( I
ax[length+i]='0';
/ T8 w( @2 d1 Y; O. h' i* C% P0 m }
' x& K, }1 f2 R \}//将输入序列后加4个0& ^" O% U! I) x+ N, t0 y' u$ Z; e
bool Checkout::qyu()' E' `# R9 O$ }, X2 D2 o
{
* O0 \; s- x' y- ], i0 Y9 `3 _, X char c[5];3 u( d+ `( b+ W$ L, U: ?
int i,j,n;4 j6 d }! P) A( U: ~8 X+ z
int m=5;- D. U/ A6 A5 V- _3 U* [' I
for(i=0;ax<i>=='0';i++);% r1 U8 |+ i/ I Y* \ J8 W
if(i==length)
, v! L1 d# D+ H$ j5 b2 U2 y {cout<<"余式是0"<<endl;2 P' g" m: ~9 Q
cout<<"发送成功"<<endl;
6 ]' W A& J$ ?4 X/ [ exit(0);# q+ |0 V( c/ E l3 L: }+ \
}
) l* L9 S$ m1 M lelse{
3 [0 p+ Z# j" ]5 ^2 a# y0 D for(i=0;i<5;i++)
2 o/ d3 o5 j- S/ T+ V8 U0 d c<i>=ax<i>;; w1 D4 C) _/ ^& V
while(m==CRC)
1 w9 h* J$ R2 ] { for(j=0;j<CRC;j++)* b y$ R7 P& w0 X" R
{ 2 b; ]% a* t1 B, h5 w
if(c[j]==data[j])
( F8 w# ~! m/ U0 R9 | G c[j]='0';% d" }# c% G! o) P
else ? x# a/ o! Y* I' W8 }
c[j]='1';1 N c3 m6 Q$ `
} ?+ T b% e$ U
for(j=0;c[j]=='0';j++);
V4 G& Q# ^$ o: L7 p! H9 J1 j) n n=j;/ ^3 x. i4 [. \& r
for(m=0;m<CRC-n;m++) T! M- x2 ]) p% B3 Y
{
$ b& C& c& h/ h* E c[m]=c[j];' a: l4 ?0 n: I' A2 ~# y
j++;
2 T, b$ q+ D9 u+ e, w }( i+ x; O* r9 G0 G V8 q
while(i<length&&m<5). \( m* M1 t! v: c
{
+ k' L0 [2 U# I6 z c[m]=ax[i++]; $ J" a/ M( G) h+ q$ h. x( m2 |
m++;
$ P) y( b* u% I" {7 ~ }
# @& R8 A; E6 _7 f9 i6 ~ }
) q6 D# L) q! Q}7 N( D7 T, `. q a
int k;
! X: |+ ~- h6 E3 r' d1 s% p) n7 i, E for(k=0;k<m;k++)
+ O6 R+ _% ~( t @& K3 H h1 I: \ bx[k]=c[k];
' F8 [2 Z4 G4 w. B& ?: _& j for(j=0;bx[j]=='0';j++);5 T q: w, H6 l2 X6 a
if(j==m). I+ f+ |' J" Y7 X& s" n
{cout<<'0'<<endl;
7 ?# ^& v- {+ L x=0;% \) K1 a1 n# t: h% M ^
return true;$ o, C* l/ I! ~# R
}
( J% W2 S( K1 r- ?$ P6 ?0 G N3 E else" I5 F4 q: ]8 X/ I9 O
{for(n=j;n<m;n++)* k) q- ?% B8 ^
cout<<bx[n];) S! X! T* A/ S. ~! D1 T
x=m-j;: f! b8 {+ ]$ u2 s. v! m' m
cout<<endl;8 W) M) L r! P# F& o
return false;' l+ K: j! O% F) d) w, v
}
7 i% c- n5 s! R# a}
8 V8 ^& j' n2 x2 Avoid Checkout::add()
3 V2 f' H, j; E7 N# g{4 T9 W8 a. V) @7 P
int j=0;* Y4 d" m5 U2 _
for(int i=length-x;i<length;i++)" M8 O$ K3 o1 k4 k& N
ax<i>=bx[j++];% K) r, S" ?0 A7 J* }) T
cout<<"发送的序列加上余数后变成:";5 u) ^5 I- C0 C' k1 x
for(i=0;i<length;i++)
, ]8 ^! W& c: w+ Z% ]- ? m1 C# Y/ g cout<<ax<i>;
3 _8 `& I" F. ]1 Y3 V' [ cout<<endl;
# T4 z$ s6 t( e}9 {5 w4 p$ b) p
void main()
: y! G, O; F+ X0 O{
8 b7 A" S& d9 Z" X; x2 z cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; + I* b9 |8 u& D, `' s
cout<<"请输入发送数据比特序列:"<<endl;5 B0 \! ?& n6 M: I
Checkout test;, B* k- P* ?' e! ?/ Y
test.cxc();/ b, L% ?9 B; W' P- y
cout<<"余式比特序列是:";
: |: |0 ~$ \7 {: {) s2 X( d7 y test.qyu();# ?% F$ V% r0 x8 x
test.add();
' r+ \5 e3 y+ y- F- ^4 f. G; b cout<<"试试这次是否能被整除."<<endl;) G% |3 ^. i) k, A% Z( w
cout<<"新余数是:";
, W* W3 R: o6 O& r1 E if(test.qyu())
: E4 T- z: ^5 U7 B/ f+ i, I( m4 g0 J cout<<"已发送成功!"<<endl;/ N/ w2 b8 H C3 n2 N
else8 N m9 i) D$ ~/ g
cout<<"未发送,失败!"<<endl;. r4 `+ Q% M2 Q
} |
|