|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
9 O3 k) u! ~9 r1 m* W# M#include2 i# e- |/ o- [& ]8 e3 |
#include
) T" ~5 g; D5 t; x* v6 K#include2 g: e8 C# K: P. d- b5 `, V
#define CRC 5
9 x* m% ^$ |0 ]3 d% Q( p" kchar data[5]={'1','1','0','0','1'};
+ k3 z* Y3 `: p! ]4 T8 Q% Fclass Checkout
, y9 V# A8 C; u$ Y8 @$ J% B( K{; G, m; Y& s9 {! k
private:
. D# n! u7 y/ }! S6 T' M) J$ a char ax[50];# F: i& P) _8 `, M5 x9 @
char bx[4];9 P3 w N& _5 b7 W0 j
int x;
+ x! D# M: F% M4 _public:
) T0 d+ X0 b, q) q. }# A' \( s" t int length;1 w8 g2 f" \- b/ i- R) N
Checkout()
7 z9 S# g0 y! N { ; }. {4 }% E8 G: V' F u- F u
cin>>ax;
- ]* |$ a/ b6 B1 K4 B7 n9 |4 B length=strlen(ax);5 }. J1 D" @) u3 n* A
}+ A4 s2 }4 m* u/ p' ~% a5 n- u! b& K
void cxc();4 i- ?3 r: I1 m5 j
bool qyu();9 m' t% z& T/ L" p4 B/ V G
void add();
7 B( I1 o; @* A/ |+ S2 c# v};
+ L4 C$ m. u: V% F& ]! svoid Checkout::cxc()
% E5 a! x0 t. ~; @{$ k! q0 U, g0 U% W ]
for(int i=0;i<4;i++){- q7 [- w! K7 e/ i e
ax[length+i]='0';* m) A# }/ Z$ U3 k" k7 k3 B
}
, i& b# F. C& L/ G I}//将输入序列后加4个01 m3 B/ o/ T- @- k/ _
bool Checkout::qyu()
; Q% V1 G! j" X' p{ q9 H$ w) Q5 b
char c[5];) ^' j/ X- Q# r" C
int i,j,n;
; W' k8 b" s/ W! F# F int m=5;
G$ C( ~$ t7 K* ^8 B0 ?. l for(i=0;ax=='0';i++); ^1 H2 H$ e' Y9 r
if(i==length)
/ e- B( D( m4 L. s5 L' S. Z, t, U {cout<<"余式是0"<, z7 V; I; q, C* [
cout<<"发送成功"<0 C/ m7 p6 M$ i
exit(0);
. v2 t; X6 D8 Y4 E" a" l }. v& u1 g9 g1 y
else{
6 a% n: d5 L# Y( a3 t) } for(i=0;i<5;i++)1 J! `& |% g+ H0 V3 X9 l
c=ax;2 ?* I! t v2 a9 ~' U& A1 s0 g* k
while(m==CRC)) N4 V# P' ]3 w
{ for(j=0;j/ n3 j: e, `; v, W2 @/ w { 2 N- O5 j' d, E, x, d. |* M
if(c[j]==data[j])# |: ~/ f0 c9 \( p
c[j]='0';
0 Z5 ]/ w, |8 K else
* f+ X# F, O3 w c[j]='1';" m6 I5 C; j' ^" D
}
0 [5 V9 H/ ~# {+ }. X8 d7 X* j* I1 \ for(j=0;c[j]=='0';j++);. P: E8 ]1 x4 @' i0 h
n=j;6 ~5 @+ _3 D( w- [) o3 y, q' w/ Z
for(m=0;m8 |! e; h0 ~/ [
{
9 A# a2 `2 R$ N: h; f( \: j c[m]=c[j];
2 }- A2 u3 O. D( X( E0 G j++; q3 L; | y e' ]6 w* P( Z b& \
}# C3 x* L+ H: U' j3 I5 u
while(i$ C! W' @2 L& R" b. K8 @+ j/ X! S
{
, F2 t2 i) a- f% u! x' s. [$ L c[m]=ax[i++];
: \7 V k+ ^1 E1 ^% k m++; $ T& ~5 M- X2 q; t1 \
}4 ^5 J- y" I1 T" i1 u
}( q! n& N7 t. x5 H% J
}4 g! s# {& P/ `$ y8 M
int k;
6 p5 k, h! A" a, b for(k=0;k& O) t' Z2 A* s. ]2 U: c3 n bx[k]=c[k];$ B+ B: X7 P( t% }! ~; ^% M
for(j=0;bx[j]=='0';j++);
: ?; [2 ~, W8 W0 K. `/ B if(j==m)* I. J" T) h3 u9 h
{cout<<'0'<$ M1 f( p4 T9 I+ v" f2 N; F3 G4 Q
x=0;
) }0 |# a5 ?- w7 o# j% y return true;* n3 m: N8 W) P& Y8 f; E
}
: j! z' T {9 R! S' e6 t* K8 h else) K9 u" q0 y) {2 `
{for(n=j;n' z6 a1 y9 R% C; I! H2 J) G' ~" ` H cout<. Q, D, M! j( Z* |( C m x=m-j;
( d" E; q, q* X6 Z+ a cout<5 O" W8 Z. j) C9 ^ ?( \
return false;
) c0 @& `* {7 A- P& T3 U# e! p8 x }- q9 G. ]7 l1 e: J( i5 C$ `. }5 r
}1 [5 a4 J' N9 M( r9 x, L
void Checkout::add()
, I3 V) P# Z7 P1 c{: e [& t* B; f
int j=0;% X# s3 `+ ~4 a" F
for(int i=length-x;i7 u6 P, D! g9 b% [3 g2 r, _; f0 ] ax=bx[j++];
% i S6 d7 T: W: |2 {$ D) b cout<<"发送的序列加上余数后变成:";
2 ~' j/ ], g! Q* \3 \$ l# O for(i=0;i( [9 H9 h* ?( H$ ?: j% U1 @ cout<;2 Q- k8 s! F" x1 W/ ]: W
cout<3 J7 U; m8 a; _' `( u8 K6 O8 ?' {
}
K- i8 t' J( P9 V8 yvoid main()
. s. b. Z1 n2 B2 N e{
& ~0 i) L+ _' d! G: x0 l$ Z( ^ cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<$ E# q# q, |, x6 U% c4 z+ A cout<<"请输入发送数据比特序列:"<& z& ]# Y" H& g% p& h. n6 ^, m
Checkout test;
( a# P4 c7 a$ E* f3 g- X) } test.cxc();$ }/ ~* d9 F0 V& _7 J/ g. @
cout<<"余式比特序列是:";: x) A6 Y# E' ?( B( f
test.qyu();
, b q8 V: Q+ P$ |, `8 Q test.add();
1 e9 _/ w3 o) ?, L* `: w- T- { cout<<"试试这次是否能被整除."<& H. v* ?6 C, d5 @4 b' S
cout<<"新余数是:";
( e4 ^( J# u& B! J l* e( I5 N if(test.qyu())0 ~+ c8 x" [5 _0 y% w7 N/ ? J
cout<<"已发送成功!"<6 s; U" h, ~, w9 ~9 N
else( N$ D. _( l9 E2 e; ?5 _# Q
cout<<"未发送,失败!"<4 A i& \ Y. J A* G
} |
|