该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
! {, [: N% D; m* o#include& t! U E0 I/ e
#include
0 {2 [0 P8 o) E9 d9 v3 A/ l1 J1 i% P#include+ d: @, Z* L5 m( t0 \0 I
#define CRC 5
+ x+ l4 c% J" ]$ V! tchar data[5]={'1','1','0','0','1'};! ?3 O6 d: |4 O v1 `3 j" I9 q
class Checkout
5 u% Y: N$ [) f& [- J$ V+ i{3 E* E9 y1 y' r% @
private:2 J1 h& j) H, r
char ax[50];
; {# B8 D) G( ^$ o char bx[4];
# j% S4 [& ~% d8 E7 J1 D int x;
) y- J# W1 e" G7 S8 [% {public:5 n9 _1 w! i; {* z) w6 X
int length;. E7 A. n8 c K: h ]) M- K$ p
Checkout()
$ J5 [! v8 X) c6 X) \9 {$ K) a { $ x2 _+ V" v; k$ J8 h* o; L; V
cin>>ax;8 Q" E; o6 U1 |; M
length=strlen(ax);
6 x4 Q/ |1 z- X3 s" Q0 ^ }% |7 m( X0 v. C1 D( `+ I# i
void cxc();6 N% S8 f" M b- |* k, N
bool qyu();2 j2 R5 J Z: v5 P* X' \9 q
void add();
4 H8 K9 O' p* B, H$ t7 D! H* n7 U+ }9 B};
4 L1 y0 p3 U1 i; m, g/ Pvoid Checkout::cxc()# R+ X$ p' K7 a+ D; s" ?. l
{7 x, y$ @0 u" D, r5 ]; ~% `
for(int i=0;i<4;i++){$ K! c2 X* @7 Y6 m) K
ax[length+i]='0';
; k% ]. Z0 L7 I3 M: M2 T, @ }2 X& P8 ?2 e2 I1 I! ~: s- w
}//将输入序列后加4个0+ g" r8 D0 K/ g/ _! w( K
bool Checkout::qyu()* o& D' _: [( [/ r# I+ ^
{4 w, ?/ V4 x, O& G9 N+ A
char c[5];
1 g2 L! R5 p) c, e( \ int i,j,n;
$ j% a9 U/ T* L7 l6 B$ g int m=5;
) d: o$ A* k1 q; `/ m6 v for(i=0;ax<i>=='0';i++);% c, E o% y" G+ ?
if(i==length)7 P4 ^7 W7 g& }8 Z# R
{cout<<"余式是0"<<endl;
w j. O* {1 R) Z cout<<"发送成功"<<endl;0 k4 @* j& O; v" ]1 n4 q) g# ]3 ]
exit(0);! a5 P5 `5 y, o, n [
}
# Q9 T9 _6 t, S i% H) Y ielse{7 D7 c; R: R2 W4 a K! |5 H2 R |
for(i=0;i<5;i++)* I+ ~" C: a6 H1 u- A S' H1 t0 Y+ d
c<i>=ax<i>;, r, I/ c3 _& L# `+ ?
while(m==CRC)! s& T ]8 C" X& v) ]3 Z0 v
{ for(j=0;j<CRC;j++)( _0 L V |/ @) \& E) }- C
{
5 A) ^- s' O) P* I: G" ~ if(c[j]==data[j])
7 k' @, ?9 \( C c[j]='0';
! `' p' ~5 R0 W$ b- c else! F5 f& o3 i" j5 M4 M- m0 z4 p
c[j]='1';
; N! ?% |8 J/ f( P }, Z! V+ p1 h2 O( A
for(j=0;c[j]=='0';j++);: e- d; P5 P/ M6 T% Q0 c
n=j;
5 o2 M1 J5 k& n5 b/ M0 U9 ^. u# [ for(m=0;m<CRC-n;m++), i p% A0 ?( u2 m3 X
{
. |0 m( p$ h* b+ _. x7 [! ~' X c[m]=c[j];6 L" K2 u+ }$ E$ u4 h4 J
j++;
$ g) \; |3 Z; O9 z }
7 ~5 f+ y3 [! l while(i<length&&m<5)0 S6 G" n; R7 v1 q) C# u1 ?1 l
{; }0 y% O) q( N u* G, l/ h
c[m]=ax[i++]; 0 A8 d/ a) I5 w! W0 t8 r" H* C: L
m++; 7 N" u- v6 \) Y) o3 _0 }
}
( b9 D, F/ i: u' ]- i }( v3 Q5 l3 A" y& K
}
% x* L: z+ s, F0 X \8 D5 ` int k;
% @& ]7 W$ }* m4 q' P3 E8 P for(k=0;k<m;k++), Y) g1 f% g# V1 g6 C0 M s' w
bx[k]=c[k];0 U6 e9 p0 Q! Q7 {
for(j=0;bx[j]=='0';j++);
$ R* J0 h7 M) y2 v if(j==m)
. e4 F; | _6 ^( L5 g8 w$ g- m5 S {cout<<'0'<<endl;
6 ^! `2 _" z5 {( L7 [ R- t% b7 t x=0;
6 b5 V" w7 N3 y: c( \( \ return true;
3 k+ O9 f) |( S; F% I }
8 `. x* B6 g1 b, k5 z! h5 ^7 N else# [, P6 M' ]* G6 i
{for(n=j;n<m;n++)* X1 \9 | `$ c& j
cout<<bx[n];
9 D, S% _8 u" o D3 ^ x=m-j;9 j2 Y- v% D) s
cout<<endl;
9 g4 Y3 }; i5 r a; d! _8 u return false;# r% ~( ~: y0 W6 s
}& ]: I4 [0 y2 H
}
7 }4 Z- k: o3 c" G1 E% J, p0 H; z5 avoid Checkout::add()* P, {5 a- f9 q% R7 K) p
{: u4 C6 H0 i7 n7 q( _, K- q, x
int j=0;
+ }! M( H0 c* \8 n9 u3 q- i7 l for(int i=length-x;i<length;i++)- @8 W3 L( J) @+ L" ^3 m6 h, E
ax<i>=bx[j++];
3 G9 y* ]' S9 d9 G8 q2 c cout<<"发送的序列加上余数后变成:";4 U' }& g9 K1 o1 \$ w
for(i=0;i<length;i++)
4 \9 m/ V5 b0 V5 r cout<<ax<i>;
4 o: h. M- [) T1 I# @( z) k7 M cout<<endl;6 V- Z$ _! z! g' S# t1 ^* x
}. u8 `, P" z1 [/ W
void main()
* ]# C: v! b) V{ & \/ [$ j. g; w& h2 Y
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; $ ^' L/ E' t4 D$ y& g- u
cout<<"请输入发送数据比特序列:"<<endl;- l0 {) Q! e! `- w* @
Checkout test;% a, @% M6 z0 o% m# P
test.cxc();
/ Y3 r+ j9 j9 w, d cout<<"余式比特序列是:";# y- z0 ]: b) ]( Y+ y
test.qyu();/ b: O2 ]! _9 p C. \
test.add();, o: g4 y- |! {( B1 Z, O. I3 e
cout<<"试试这次是否能被整除."<<endl;4 O- Z" Y" N. k7 e$ U8 }7 S' }
cout<<"新余数是:";+ `; G% M' H& H" a7 `9 v
if(test.qyu())3 U4 h0 g1 U& i5 I
cout<<"已发送成功!"<<endl;
8 A+ E$ e$ {) q7 B3 \ else
- E/ w4 m# B) c( X# `) p2 I3 L cout<<"未发送,失败!"<<endl;
: L/ r3 O# E9 j% j- ~4 V+ O$ s9 d# H} |
|