该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊: T! D+ z9 P: V" a: C- G) F
#include
6 t, Y* ]$ Q0 w- o8 D3 s2 M- e" b#include% r. I+ `. M. T0 U1 k# D3 g
#include
& W: j. E6 C$ ?#define CRC 5 F# I. E2 N' P4 W" x: r5 J' J; w
char data[5]={'1','1','0','0','1'};
) ~! J9 @1 B5 A8 ~, q1 ?' Sclass Checkout
" d! S7 V0 j/ i- L( q7 |{
( c7 a% W) N7 g! I. h9 Mprivate:
' {+ i% x5 G! V2 I' v char ax[50];9 Q' `( J$ B" o
char bx[4];
6 A6 x% g& A" t5 V int x;
5 u2 E3 d6 E8 A) R/ b/ B1 zpublic:
9 L$ {+ W5 c! m- [ int length;
* X: ~; \! Y5 f$ y+ {, V, I Checkout()
! ?2 v) \/ i% x: m2 H8 u3 O" k5 ` { # |2 k$ ~" i/ ?0 f
cin>>ax;, h+ B8 d$ \5 Y* m8 c& b9 j$ X( ?
length=strlen(ax);! m _- d. x/ _/ ?- t
}
$ R; B# b) k& g; i0 } void cxc();
7 X# R/ v7 c* ]6 ?4 \* o bool qyu();
$ e2 p) Q! k, F( b& }8 E void add();7 D7 r, X+ i1 H; x; T0 F
};
4 W( K" ?% b/ o& ~void Checkout::cxc() r" i& K. p8 q; {/ E& `
{
- I2 x3 }/ F# Q) R for(int i=0;i<4;i++){8 C0 }" z0 q% O( K# R' i
ax[length+i]='0';; {2 n w1 V9 T5 X# j: Y
}1 o, T8 Z2 B; G& q: T
}//将输入序列后加4个0! M( }+ Z( t8 c3 u+ l0 B6 e
bool Checkout::qyu()7 y2 T5 S# ^8 t9 z! s% G4 [3 N; D
{
0 t5 Q6 k4 s: X' r char c[5];4 q7 ]" f" V; N4 [3 }$ E% I" f) [
int i,j,n;2 a9 R# M+ O! E- P7 s
int m=5;) R2 x. Q4 q% X \, B; b
for(i=0;ax<i>=='0';i++);
7 O+ ]* [/ _+ X3 y4 R6 n( H if(i==length)% m. A+ z6 |1 G# v5 q9 f
{cout<<"余式是0"<<endl;
9 X8 Y) {9 E( ?5 f: {: I9 A cout<<"发送成功"<<endl;
8 V* g. J, E& @ W# j( X: n; a exit(0);1 i, e9 W1 }; F9 |, s# D9 m8 a
}+ B' O' P) L9 D+ [: S$ b5 ^
else{2 i _! T" j! a; f
for(i=0;i<5;i++)
3 S; F5 \ n9 w7 ?/ i- n# h1 H c<i>=ax<i>;8 e7 w- E `5 [' y! [- V
while(m==CRC)
! {. K) W" Q [5 h4 B8 t { for(j=0;j<CRC;j++)
5 M t+ K4 A* Q& D" q( g; ? {
3 F( _$ Z T p6 s if(c[j]==data[j])
9 n9 S3 v s* g c[j]='0';
7 h, D+ `# s) U z9 I, f else, q. a: v: J N+ W. E
c[j]='1';
* D% h) r* S3 @! w" }$ Q }) F: r# u+ L7 A& d( Q- @- h
for(j=0;c[j]=='0';j++); o9 F+ A1 z3 @
n=j;0 e, j8 u# _. f1 S7 m% w+ c; j$ Z7 l
for(m=0;m<CRC-n;m++)
* Q' H% i" N' I2 i5 L {
; G1 x$ S5 l7 Q# M c[m]=c[j];
, M* F( J, L' e# y0 l: m1 V. m j++;
2 I2 G. v' h' \0 t/ T9 a8 T }# Y8 B& D3 K: j0 [+ x2 P
while(i<length&&m<5)
0 k* v2 S R- o9 h ?# | {" N2 @# n' B- ~& i I
c[m]=ax[i++]; 7 S7 U$ J! k9 f; a4 X) D. ?
m++; ) G3 n5 l/ a. L" I6 f
}
" D- r8 B$ |3 B, E: X/ p* |( c6 A } c ~9 B0 a- w4 q
}+ B6 x% d, Q2 I% Y' N- g
int k;
. k! _1 X' b; X3 L' X1 Y for(k=0;k<m;k++)) E* ^2 \- w8 i4 Y) l
bx[k]=c[k];% x! I! R+ {; f. i5 h
for(j=0;bx[j]=='0';j++);
9 A$ [$ `( P4 N% j: b if(j==m)
$ A6 \4 b/ h6 Y5 p {cout<<'0'<<endl;
( Q# }' P( ]7 `! M7 C5 P x=0;
, @, i" h$ t# t$ h7 h. _5 ]9 g/ ~ return true; l+ Q6 |% ^ J$ F6 R" ?' \. f6 K
}+ }" K3 w, a8 [4 D+ y6 m
else
9 n6 ]8 R2 |( x {for(n=j;n<m;n++)
1 I8 y9 r* F6 b cout<<bx[n];- b O; {: I: b/ P* b# Z
x=m-j;$ U, B/ N1 d2 ?9 X0 e- P
cout<<endl;4 B% _) K5 A- {1 ?
return false;$ b2 z! N/ S' p0 h( N
}
- N w- P5 g/ ^- ^6 G6 {8 k}
* ^+ f! i( e' T; o; A; G% U) @& Hvoid Checkout::add()
* `) Z$ q8 x9 G: \# s& v& h; M{
: S* k# m4 [1 h1 pint j=0; p/ W) z; N1 q* S( Q7 ?
for(int i=length-x;i<length;i++)
- L& A% V% n8 ^ n4 z6 _ ax<i>=bx[j++];
' D7 z: V% c1 Z% ~. v cout<<"发送的序列加上余数后变成:";8 F6 J8 P: h4 D M1 o* m* [
for(i=0;i<length;i++)6 {, P7 M) ?3 u" h
cout<<ax<i>;% p# J% m( g, ^; [, O; |8 J4 U
cout<<endl;
+ ~( T0 }, n* f3 P}
4 R7 `; i) X# o3 E. K5 g' m- N/ ~: Nvoid main()4 v; \8 t; z& f3 k
{ # o$ x5 S% p( I+ K! @8 \ `' d, s
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; % f* F4 N8 A' T4 h% u a+ q' S
cout<<"请输入发送数据比特序列:"<<endl;
. O* u! m0 [* E O. | Checkout test;
7 b8 b" p- k6 z/ a test.cxc();0 A, l2 j7 ~7 c m
cout<<"余式比特序列是:";
# d% }+ a' N: v( p; m; F5 i4 t test.qyu();
: e" q |2 U( D" o/ u) K* l test.add();
% b: P- C# u1 B4 u4 U1 k cout<<"试试这次是否能被整除."<<endl;/ i V" u& O5 N
cout<<"新余数是:";
1 P( [, d7 y. j9 y) b' B/ \5 { if(test.qyu())4 a- E: }7 |8 p2 D& |, t
cout<<"已发送成功!"<<endl;' r/ E2 a: m) r3 {) K9 S( K$ A
else
9 z9 P5 V0 M' {. I cout<<"未发送,失败!"<<endl;' {) H' i' }' n+ \, S2 Z
} |
|