|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用5 r$ n4 e" a, E+ |/ n/ ~( N0 |; c
#include
* U3 s, l- R! C) x) i- T d#include
4 C, L, A7 k: M$ D& G- j#include
# W W2 t' H, p4 s; \* X% o#define CRC 5. A/ V! S2 X7 c) s8 v6 o
char data[5]={'1','1','0','0','1'};) Q' ^6 A6 Y9 R- I) G" G, z
class Checkout
/ l3 {2 X2 z4 X0 c{
" H' @: u7 c6 p; V" K! i* d; [private:& j* q! W/ O. j" c/ J
char ax[50];) C' C- B- I- ?9 h& J
char bx[4];+ `1 d6 u, C3 A; {, K# G2 n
int x;
" V ]+ M: h: p( M& }public:
% V+ f+ |7 E9 \! g, x. I+ x int length;
; y0 p: S6 C7 p/ x Checkout()% @8 G& ~. v7 g9 L
{ 1 K2 _% M+ T# ^$ ^+ U
cin>>ax;
% j4 j+ L) W0 A length=strlen(ax);0 P+ X8 t& v) ?' o
}4 Q4 k5 _& n: Q0 a
void cxc();
6 A& q/ u2 y& k( L bool qyu();! l; S* Z5 a: Y9 N
void add();: h) h8 i2 S. ^0 v- P& b9 v2 | w
};
+ j; J0 s4 Z4 Y o( C$ e( fvoid Checkout::cxc()
+ c6 W$ o) e2 G{
. D$ o' q% @1 C2 f for(int i=0;i<4;i++){ ?% N( s& h+ h0 F8 D4 K3 X( N* j
ax[length+i]='0';
% j1 {8 a0 r$ `) _% y( Q }+ N: w6 u0 @8 O3 O& L8 o) [: q* _
}//将输入序列后加4个0( D- `* d8 q5 |4 T
bool Checkout::qyu()* J( }! y8 q! p- t0 ~" w& O u
{
# k. {4 ]. b4 r char c[5];
- h" |$ e# a. u0 l5 V: t int i,j,n;% l/ }! G$ j) i, J6 e* n4 M1 Z2 n
int m=5;$ g8 e( Y. {% q# s: m* P
for(i=0;ax=='0';i++);$ S9 z2 E& o- x! Y! T p2 X$ \- b
if(i==length)
7 X6 c, \: I: M+ z: f& V- z {cout<<"余式是0"<9 w& f( t+ M0 z7 l$ B cout<<"发送成功"<3 v/ I% t# N" I1 d) _, W) x
exit(0);/ n) ] b6 Y4 i! i
}( I3 R' y" o: ]5 j2 R7 e
else{) r1 Y" a$ f8 u3 \0 {3 S: m1 n. b; K
for(i=0;i<5;i++); w) O& ?" _: Z! t" s
c=ax;
6 X8 r8 q, ]* Z1 Z while(m==CRC)8 G) q2 t- f6 L
{ for(j=0;j% ^$ ?% u0 k5 o
{
5 v' @' a I6 u5 [5 `4 _* M3 j if(c[j]==data[j])( S; y; ?' H d+ u) o: T+ I" X
c[j]='0';4 s- K, h z) b! z, A! v# s
else5 H. n3 G# b1 E+ y/ P) F5 j
c[j]='1'; l1 S0 _& ^6 Q Z( d
}
# P& ~& W) Q* i; I* A9 v. U1 d for(j=0;c[j]=='0';j++);
4 I6 J6 M7 o9 ]6 ]3 Q& a$ i" s n=j;
1 V2 H/ w0 W: A& p w6 }. d. c( x8 x for(m=0;m2 V2 D& `, s: ~& b
{1 s+ Q6 u) k# v7 c; z4 y E
c[m]=c[j];( C9 y; Y9 T, R* J) x
j++;3 b0 \* |9 Q& l; G' ?- a1 N
}
" v' o9 e; X. {1 X4 x: n3 h; t! P while(i, L% J" x+ N* _4 Y {+ H2 V* g/ D$ x+ V% @. F
c[m]=ax[i++]; % h! K3 W( z. s5 `
m++; ) ]; j$ {* `- C& U) x
}3 i7 x& q% m" z
}. w' q' P6 L, q5 v$ e) J
}
, U2 W: k2 t/ U3 [: ]+ \9 @; m2 a int k;
* X) m. N' h9 `, Q2 k' p5 M w; W9 S for(k=0;k: Q) |: Q8 f3 ^8 U3 T ^6 U1 |* p. h bx[k]=c[k];- R1 N# t1 Y- Q/ s* U
for(j=0;bx[j]=='0';j++);
6 c: V' ? ^! s; k8 n0 Q if(j==m)) s; _( N( i& g" h
{cout<<'0'<0 A4 m9 R& h" d. f s
x=0;+ p+ J B s% u
return true;9 o" @9 l0 H# m a; h) w
}& {0 f" @; d5 F# U* E* z
else
3 _; g0 b- ~! ^ {for(n=j;n. ~* D& ~$ q% p: ^) a q O. Y
cout<1 y- w) C- \8 E5 w: M- z F x=m-j;
0 [" t b- L4 Z" ~6 e5 | cout<4 i+ C7 g6 l! v9 ?+ u9 Y1 |
return false;
8 S _8 ^; o7 V9 D' {, \ } ]6 H7 [2 M i
}
Q8 `0 J8 C# v3 Gvoid Checkout::add()
) n- c' Q: T3 V" `4 Q{4 Q3 f* L' c1 @/ W& I
int j=0;
) s4 E7 @4 x, Y9 W for(int i=length-x;i4 ^, K4 k0 P1 A% ]3 J ax=bx[j++];1 q5 i, c+ P F* s+ x. L7 _6 U" l
cout<<"发送的序列加上余数后变成:";
) A: x3 Y. f8 |9 {& E for(i=0;i. X$ f4 ]/ M3 F( b# ]/ q: r
cout<;8 o1 z' C# n" y h! z/ p0 j
cout<7 g' ~5 `* w, Q}3 [2 h7 |8 Z% f' h
void main()
, F# N+ L7 H! t! C# O) d$ k{ 6 }, j! }1 d" [
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<& C: {1 G; I% E* p) x
cout<<"请输入发送数据比特序列:"<- {# k3 C. n$ W) s- w Checkout test;) O. d/ b9 g5 }2 n
test.cxc();" o5 T3 q, b& a& h) A0 t
cout<<"余式比特序列是:";
& e, l# K* }5 X8 B+ O test.qyu();" s1 l# f6 O9 C# ]7 V9 n
test.add();
: K1 v; O& D4 }- ^: U cout<<"试试这次是否能被整除."<# y* F8 b' ]4 P H. T5 \ cout<<"新余数是:";4 |; X8 \, z3 C v' w$ h
if(test.qyu())
- J. I2 o O' [( X cout<<"已发送成功!"<& ?# A+ U( \% k( v1 a7 A
else2 h0 k$ G" r4 r0 A
cout<<"未发送,失败!"<9 W0 l; x- I3 S/ m$ w} |
|