|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
a" g; M/ j& K( V#include
" j! m8 m9 V5 Y0 M: Q#include' `7 P$ r/ P9 P3 c) O. T; P% G! _% o
#include
" l Q* J* b1 c3 |#define CRC 5
. P: j4 y) Q5 c( _7 kchar data[5]={'1','1','0','0','1'};
- [9 h. ~8 }8 E. a: Oclass Checkout
/ I& L( N3 g! Q5 i8 w# S{0 I: ^/ v$ [" _* f0 W7 c9 d
private:3 J4 j$ y2 a' t4 m$ d" H
char ax[50];
0 a8 k. l2 [# B7 j" Y char bx[4];' ]! g) W: t8 m4 s9 _+ N
int x;0 W0 J* u) W: ]8 L/ p
public:1 a7 T% b% W8 x+ f
int length;0 {0 K5 B- d4 L; c0 c9 \, V
Checkout(); B5 Y. z; F- p: a
{
/ W ~ \# q+ f+ h. m cin>>ax;9 ]& K( A) H9 z: @/ x9 q3 r3 X8 d; S
length=strlen(ax);9 T6 @6 q4 H/ V
}* ] @, k( x5 u
void cxc();
. O+ x, V' w6 S v i1 [4 y1 i8 i2 I/ D& g bool qyu();
1 Y: W x4 a7 w" _- R void add();: }9 l4 e: d$ w: m e
};
1 q: X: k, C9 I8 D* gvoid Checkout::cxc()
2 B; w/ t' @1 r- ?9 J{& }( I0 Z; S$ y* i7 u, ~) L
for(int i=0;i<4;i++){1 O6 m/ R" J4 A0 R' d
ax[length+i]='0';
$ E1 ?0 b% e, }# k2 a }. {& V# F5 }. k, u/ v
}//将输入序列后加4个0
! N2 o5 i" V) l9 v( k) \bool Checkout::qyu()9 y/ }( u& Y! {) M+ y- \/ |' ?/ H
{$ E9 E& s' I1 S9 t
char c[5];
& b! o. F; c8 H7 W) F8 j; u int i,j,n;1 X: g K% t/ `+ l9 Q, J
int m=5;
/ j+ ?' L! r. z" d9 f/ \ for(i=0;ax=='0';i++);
5 Z( z4 L) p/ [ if(i==length)
9 E: c" `4 C1 k, B5 ~4 T, l {cout<<"余式是0"<: p7 [: N+ T$ t! F# b8 I* N cout<<"发送成功"<9 {2 @" t/ P9 I8 t; o' _. x# _1 ]4 D exit(0);/ x' Y/ N! d& `* K# p. i
}8 x/ j6 C* S3 Y. _# C! P$ e
else{
9 |7 a" g- Q3 c1 D for(i=0;i<5;i++)4 t/ I/ N# O( j
c=ax;+ U' P ] \7 l1 v& N, ~
while(m==CRC)
2 L* n9 E4 L8 L4 b/ R { for(j=0;j3 _3 K; j- x1 D; n) N/ m! { {
- K" n: d* j; D* H# P if(c[j]==data[j])
/ y5 s [+ p* K( G! P9 u/ n& `0 q c[j]='0';! q! p4 t. l( K. P
else
& T5 a- t! z" P7 a7 K9 X0 W/ e9 k c[j]='1';
5 q6 L, u) q. q: v4 \5 I6 ~ }
% r2 Z: Y% u6 V for(j=0;c[j]=='0';j++);
# \7 B2 g ]- J* z3 l- u n=j;/ n+ N! h7 O( B& W+ e* G$ X# J* {
for(m=0;m: N8 ?( J1 |! S; h: N) h: L( \
{
3 I1 H K( K" h$ t! A. w c[m]=c[j];* G) \; q8 u. v( }0 B
j++;
* i, h. z( Y& ?: [3 f8 m }) J/ \- g; l7 z
while(i: b. Z8 D5 m) v! R) M9 ~
{! {7 F* C/ j1 [3 |- f
c[m]=ax[i++]; - w1 |: c# w( A1 a8 F# j3 [' I' V* s2 m
m++;
) r6 z6 z ~( n0 m- i5 a }7 u! @; ?3 `4 N/ a2 F+ f! B7 E* } c
}
' i' ^. P0 w: c4 s9 z}
: Y8 n' F `7 t% `. R& v int k;- A1 N- U p- k. r( U6 H/ v
for(k=0;k1 g# ?; z) X% k( y
bx[k]=c[k];
0 ^1 R% Y8 Y; h/ X S for(j=0;bx[j]=='0';j++);% A. a; I9 |1 y' b3 {
if(j==m)
* o8 ]$ }7 G. a* o2 R6 o {cout<<'0'<7 s6 p. c9 ?3 A" J; H x=0;
, W, }& r: h: K6 _/ J return true; y! s; G+ j# Q* n" H
}: h: _3 x* {9 U* T5 ?9 D! ?: e
else
' H! C7 Z8 @3 v6 ]; {5 q9 h {for(n=j;n, j e+ E3 ]+ @: a
cout<! q3 v; o5 B7 b% A x=m-j;" B" Z$ C. J- v+ T
cout<) i9 a" P( P* C, N
return false;
! L5 v# I! s9 p& y9 ?$ [/ {$ D }
% y- D; m" o4 f; ^3 \' ~# ^2 W6 l}0 f; R6 `+ k, |) I% J4 L" I
void Checkout::add(), M$ T) i5 S& W* f, P" L. k
{
7 e# T8 I4 \! p$ R; J- bint j=0;( ?, E% {* A* H
for(int i=length-x;i+ v6 P5 N( o' M" j' Z( b ax=bx[j++];
+ x- _$ x6 I* n% W cout<<"发送的序列加上余数后变成:";
. A' Q9 |$ n! o6 b' i for(i=0;i" o3 u/ o+ U( d0 e! Y cout<;. X, }5 K: l# B1 u
cout<& T+ |( G+ Q$ J6 V: P}
' g) x6 z7 i+ X+ vvoid main()8 S1 E, Z2 q& V, h( z: ?0 N( C
{ 4 X5 w3 i4 c2 R$ T% R, i. P% W; S; R
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<: B( w6 J {3 V& _
cout<<"请输入发送数据比特序列:"<" C4 [" b% X* V. O+ d
Checkout test;' l' l% F9 S7 l- G. e: l
test.cxc();
+ I( V, ~8 H9 `" ^/ @ cout<<"余式比特序列是:";
& D- Q. g* d9 c+ j. r' i test.qyu();. e8 \: S8 @; d: J7 k
test.add();
- v7 G2 H; h. w% }$ P" O5 L cout<<"试试这次是否能被整除."<% n* R9 A- H9 n2 E
cout<<"新余数是:";; p2 c2 F1 D9 G( B
if(test.qyu())
b% O' B. n0 G' M cout<<"已发送成功!"<! n) v2 N* c" ^/ E5 Y
else, c. L, B0 O- c! t! M6 e0 h
cout<<"未发送,失败!"<( b/ `3 ?% z x- ^/ n8 I- g} |
|