|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
3 L/ g% r9 y) Q' z- e4 l" X#include
6 I R2 G5 l, |3 }; N" L) p% r1 r#include4 h8 p& t) O$ u2 T! d# W2 p
#include% k, p% q) ] z* o0 s
#define CRC 53 A& o( b# j* d4 M
char data[5]={'1','1','0','0','1'};
5 q5 Z* c* n" R6 K* kclass Checkout2 S1 s6 e- |# X
{) F# b" R( {: R K
private:
+ ~: T* y0 v7 b4 G+ M+ ~ char ax[50];& _# `& W* t6 a$ z: r/ @
char bx[4];
! s" M. B1 ?3 C3 | int x;
, @6 r/ Z; C) h& O- z& |7 xpublic:' p/ Z$ h2 o; i1 e& u) g9 _* Q
int length;
' S0 f6 Q$ u; ^+ y5 | Checkout()* L$ Q% S2 W7 e; z0 v
{ G9 z* ^; C& ?1 V
cin>>ax;
1 S. r9 g+ d8 G [ | length=strlen(ax);
% y9 r: ?$ A; @" \7 `2 N w$ I }
# a( r2 |' h5 I; [1 j. O4 k9 t8 S void cxc();: M9 c* O3 k" c
bool qyu();. \& P4 t# q* L* m( e9 h H3 [/ T" v
void add();! e. r! o( c! A, k8 Y
};0 o" @; h7 A U! d( O: b% x
void Checkout::cxc()
6 A6 `) R/ N! H" |; J{
3 |2 }+ X% L6 x. m( {3 O for(int i=0;i<4;i++){
( d1 Q4 X+ e) T2 ~ ax[length+i]='0';
. g% p, N/ a8 T# Q }9 K0 Y' T+ d' J/ \
}//将输入序列后加4个0) ?* H" ^ ^, r
bool Checkout::qyu()& j* V, a5 H- G% c7 {' N
{
+ N/ Q& e7 a: \' M: t3 g' C3 z. M char c[5];9 e; T# ?/ u R) i. a
int i,j,n;
4 O& N+ i6 b, U2 X1 f3 d int m=5;4 h2 i/ r k4 F( y2 s
for(i=0;ax=='0';i++);
7 }; r# T/ e" I% X Y if(i==length)3 I1 X- B$ a) j( u1 W( T( v
{cout<<"余式是0"<4 p+ k$ W% f1 f; i& T cout<<"发送成功"<2 g" y/ c3 M: v3 d exit(0);8 B; c. a$ J" `3 k4 @; H9 [
}& U1 v3 h2 j+ ? Q7 _- @& F" p
else{
L5 d0 N) T* j b, r3 [ for(i=0;i<5;i++)
# n' S' ~" Q5 F0 y6 D0 }( G c=ax;
2 Z1 C6 [% _1 q. C, W. T9 U/ a while(m==CRC)
k$ N4 s% P( C( d { for(j=0;j; J e' o" ?1 T' R
{ ' P V- }/ d/ l5 _3 G, [; x. S4 R/ M
if(c[j]==data[j])
S. |( h* w. i6 h. O7 [ c[j]='0';" H8 A& [- K( q5 ?
else
& c7 I+ k7 Z* R4 T! y( c c[j]='1';8 X. `3 S1 T0 E1 ~: Z6 T7 n* [
}5 w/ X" }- \' x8 K6 U$ [
for(j=0;c[j]=='0';j++);6 T3 L7 p% u! @7 A( [$ P
n=j;
/ g7 i/ y7 f& ^, a1 T for(m=0;m6 }& \1 z- R) Y3 ~. P3 f% e {
* Z. a+ G5 f$ D* k0 e c[m]=c[j];
* _" m! o1 p- e: U7 S$ p) V j++;
+ ]) j1 Y' g r9 v; r5 Q }
3 o/ C% [" F, Z3 q while(i B; B, R! n: R. I( f% Z& E& r
{
( U7 Q, {$ L7 y, f9 f' f c[m]=ax[i++];
, [! v0 x* b( O. i) P m++;
& N9 P, x) \3 b }
& {1 c9 s H$ }) X* Z }6 x, V4 K$ t+ o7 P+ e
}# v. z8 ?0 t& |& e. z' T
int k;
+ x4 R: u& l, ~2 s! | for(k=0;k" g- z+ U! {% J: h3 n& m bx[k]=c[k];
; o5 | D* {7 J* N4 e for(j=0;bx[j]=='0';j++);0 N7 E' Z+ R/ e8 c4 u
if(j==m)4 F8 P1 S& `8 {4 S
{cout<<'0'<# _ [6 C$ L( u6 f0 I7 J/ `; U* g
x=0;9 N0 T U8 o Z# x! q, K0 i
return true;
! t+ Y: g- k4 S2 ]6 T3 \" s }, Z$ d+ f7 r9 ?% m. a
else. o u# X( X+ N \6 a d# U
{for(n=j;n6 _( w9 A, R& e4 @, P cout<% Z& O2 F9 c4 ^" }( ]$ U x=m-j;
# c" C9 g: w$ @9 K cout<) g4 S: r; Q' h0 A$ J7 j6 Z return false;
6 v& x2 e) e. q' s) J }8 v# P6 x4 T( u9 I
} [; x: e5 c5 l* g% h
void Checkout::add()' o5 d( t# @+ L0 Q2 ~9 x$ l
{, O$ _/ C6 C1 w+ h5 J+ {
int j=0;6 y/ e7 Z& H5 w: \
for(int i=length-x;i' Q4 i* ?' x }& K# q4 U. V
ax=bx[j++];/ S( Z! r- i3 `1 Q6 g4 V
cout<<"发送的序列加上余数后变成:";3 j& Q8 x8 W2 Q0 I5 f( `, d0 J
for(i=0;i# C$ M4 T2 n; k" [3 M/ T( L cout<;0 S. V, f+ E) ~: a# @ ^
cout<# f% h' `; ^! N2 ~. H$ Y
}
) x; f& t& Z1 j& {9 K* Zvoid main()
/ I: W6 w3 R8 f4 u% L! K, n3 A9 A8 |: b- J{
6 O. a8 g+ H- x4 B+ g" r5 K) y- M cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<& s) B5 \- @8 t+ V7 z9 Z5 i5 i0 j
cout<<"请输入发送数据比特序列:"<8 W9 _/ r. a, h1 e' ] Checkout test;/ B! g. v1 O8 z/ H3 T f
test.cxc();
' R! E% O/ ]& F1 Z+ V cout<<"余式比特序列是:";
" U4 T# o- J5 P6 U) h test.qyu();2 x- F3 q+ {7 [" y4 ^& | b( {
test.add();
3 K, x1 ]8 u# i, |- l% a cout<<"试试这次是否能被整除."<; a. g7 [. F/ \& t% m7 I$ J0 M* C
cout<<"新余数是:";
5 J& s# Y7 `4 F8 U3 x; N if(test.qyu())6 X1 }: H; A( d8 J9 w4 Z6 X& o+ T
cout<<"已发送成功!"<( Y# J/ z& m/ j4 {5 f, y# Y& c
else
- \1 Y7 S' A* ?3 U Z. }* ^ cout<<"未发送,失败!"<( |. v) k# U8 W2 L/ j. g
} |
|