|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊/ U% F0 K- [* D$ @9 M
#include
" I1 w/ R3 x% I8 L6 x7 B#include. K, ]' r/ B1 Z! ]5 s* j
#include1 C$ U' f9 }' T
#define CRC 5, D, P, u; c7 ~( h# B1 H) e
char data[5]={'1','1','0','0','1'};
5 h4 Z& M j& Q9 d, b+ rclass Checkout
, S, F$ g( q$ _) [( W- ?{
3 f0 C( o# e% s4 K$ \private:# e/ o1 b3 Q4 i2 n
char ax[50];1 Z# ^$ W7 z! ~2 D. |5 N
char bx[4];
! i/ L8 p& J- `) |- @, k$ n int x;9 e; y: M& R- X
public:
0 d" ?/ C' r' o _' ]0 m% I int length;
& `' v4 d" }! } Checkout()
8 z0 i2 F2 t5 q { 3 k% J' x, C! y& `& a' W
cin>>ax;
+ a/ X2 @+ q7 M6 t6 G T length=strlen(ax);
. d; ^. B4 M! Q: o' ?( v }" s6 L4 Y/ ]* J5 L4 k
void cxc();2 G: b W" {/ E( x( I- |
bool qyu();! L/ Q& R1 O) S3 p3 H( q
void add();7 A! S) a3 e! [ B. [
};' N9 g+ e6 Z( {: m- T% U( f
void Checkout::cxc()
; l) j- W9 L6 \; _2 {7 d4 e{
# _, p, |6 l3 r- d% o$ p/ [$ n1 ^ for(int i=0;i<4;i++){, z0 y1 r7 z" w6 c' s* T- w2 Q
ax[length+i]='0';
0 T' X5 z5 P, i% ] }3 W- a3 ^- e4 V9 I; g
}//将输入序列后加4个0/ N- m# p1 t8 j1 S, `) ?" t
bool Checkout::qyu()8 o* l7 c; D! b
{$ J/ J1 V7 b/ S, U" F
char c[5];
% P& b1 U4 W5 J. G. E9 q3 \9 y0 ]- { int i,j,n;$ P- [7 ?( i0 X
int m=5;# h6 L7 N) j6 K' U
for(i=0;ax<i>=='0';i++);
3 H# c+ C2 r, K$ B! }' _ R if(i==length)
2 n \ T5 s1 o) K. I; k {cout<<"余式是0"<<endl;$ T! I, H) N* ~& ?" A. k5 l* z
cout<<"发送成功"<<endl;
9 P& V8 t0 {+ l) Q6 X+ [, ] exit(0);; U0 k, ]' V* f
}) [+ x4 ?2 ~) ]; Q
else{! d$ y4 p* x- J# J2 K% F6 L* X; d
for(i=0;i<5;i++)
$ ]. P' m8 Q. b, o c<i>=ax<i>;
: i- \9 G! [2 }7 k. p' F while(m==CRC)' ^* g% L1 I- E. B) Y4 D
{ for(j=0;j<CRC;j++)
" o# s) K% l% P- i3 B0 {; w {
2 K( E# J' @ H6 m' U if(c[j]==data[j])
4 a" M' ]# d# N8 h6 D, R c[j]='0';
- h7 X' d$ z: C8 g! E else4 Y3 X1 t# H, G7 Y! s3 W3 X% n1 W1 `
c[j]='1';: q$ n! t/ F; z
}. B6 d1 q a7 G9 p7 c# T7 O
for(j=0;c[j]=='0';j++);6 O% Z& z& U( L: D7 ?0 P, o
n=j;; O2 h* F: G4 K4 h
for(m=0;m<CRC-n;m++)
3 R" u- B, G! |3 c. d9 o9 f {
6 h. r0 k+ M, r c[m]=c[j];
+ @( f9 \$ x9 i; N, {& s* h5 Z$ Y j++;
9 P" w8 m& V2 w1 { }$ z* q4 e8 }* P2 r; h& V [7 `
while(i<length&&m<5)
9 ~& H5 [0 m' X, t3 k { y+ s( T9 k5 R9 @' {. F
c[m]=ax[i++];
: A$ Y: E) ^. ~$ Y" [5 K m++; E/ o& \: \6 c/ f. F
}- R' B% F, t: }9 j( c& W4 X4 n5 n
}6 M- C0 c2 ]/ [" F" H- l t5 c# N
}
4 ^' f0 v8 c' v8 d l# ? int k;
$ ~* e- ^5 g3 l# E: V for(k=0;k<m;k++)
, \& \) L5 R8 [; M bx[k]=c[k];4 S- F1 I) g3 j' y* T7 i' u
for(j=0;bx[j]=='0';j++);& a6 A4 \0 {$ k8 V
if(j==m)
) |* y5 G$ }" a7 f; ^ {cout<<'0'<<endl;
8 f: Z: B) ]& ~9 x9 D; I x=0;5 r+ G6 b; A3 e, t* P `
return true;
/ n' e" U7 x# A) x Y, x9 Z, L* F }# e9 `% d$ q/ m7 f- P9 `' c/ K
else" o. n" S* q9 W0 L9 b
{for(n=j;n<m;n++): [/ ?5 U( L. r. q% I4 N5 a
cout<<bx[n];
6 A0 p" n! J& I* P- f- S6 q x=m-j;
0 Z1 A1 @& R0 s5 [, I1 Y' x* T0 E cout<<endl;0 U+ t4 W8 a! A3 D. |9 y
return false;
. ^4 y- n- ]: K8 ?; g& \0 d/ k5 K }7 J5 f3 X7 Z" h, r v
}, P9 N) {1 O( b8 h8 Y
void Checkout::add()
3 o4 k/ s: t( u- s$ y2 ]0 s ~# O{$ s% }0 h$ n% ]$ Q Z( b
int j=0;
1 V7 [4 c, y' {" o for(int i=length-x;i<length;i++)
( U' m4 U8 k, N9 J+ n- L6 z- V+ l ax<i>=bx[j++];7 P' T3 g' x. v8 A/ n% i
cout<<"发送的序列加上余数后变成:";1 s# c7 I% y! f& G' i
for(i=0;i<length;i++)2 ^9 }& v4 K! V" F7 S
cout<<ax<i>;/ l% E6 {7 j- i. V8 i: a
cout<<endl;2 n* O) I I/ e% b5 G) c
}
1 h/ h5 G) I# _; T' A7 e& Dvoid main()" p: N: ]: n8 v; L
{
; C8 u0 Z+ v/ k9 q! J cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; * U9 W! g% n, j. i( b9 s( ?6 O
cout<<"请输入发送数据比特序列:"<<endl;" J- c6 Z5 e# D5 J0 r
Checkout test;8 L- u8 ?% W, ~' V) S
test.cxc();& |4 w: H8 e9 g2 O# j/ d/ c- F" M9 k
cout<<"余式比特序列是:";
; n; i1 ~& d4 W. L# z test.qyu();
+ T' t! h3 J/ [% p test.add();; O. R4 q+ s3 A, m
cout<<"试试这次是否能被整除."<<endl;
' H8 A8 u; a7 _( O6 K! _ cout<<"新余数是:";
( {8 r/ h t* ~0 q- s if(test.qyu())
4 r& b% Q2 J& Q% i/ _ cout<<"已发送成功!"<<endl;2 R: C7 W0 \: J6 _2 l. r( Q+ x. B
else# I9 h: Q! U+ z, q) v$ j! Q) d
cout<<"未发送,失败!"<<endl;$ A! y9 b1 `+ b
} |
|