|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊: f# i) V$ _4 x* h
#include$ s. u( Z h4 U
#include
, @# U% _4 { }) Z2 f; |2 E0 B#include
& K, O) K6 A9 @#define CRC 5
5 B! _+ J6 v/ `1 fchar data[5]={'1','1','0','0','1'};
$ [. m# P3 a* x4 Hclass Checkout
2 V' _! n" E6 f! |+ |5 @{
" R9 X, L9 S! m. vprivate:4 ^# _; ^) _. s- B4 t3 k$ d
char ax[50];( O- n3 n. x0 x
char bx[4];) U' X: H3 k' @
int x;
8 r4 a1 } y+ C! Wpublic:/ E# k) K1 ^$ G+ ^. A6 A( Z
int length;1 ?2 K q' g: Q' Z. K
Checkout()
8 {: I+ E9 K, l; K- @* D {
* f( G9 M3 X3 ]" F6 d+ v6 U5 d cin>>ax;9 Z) f' ?& m( j1 s) A. M& A8 E' I- K
length=strlen(ax);
/ T8 [. E6 Q0 w- N' A6 l) s' A( Y" D }
3 v, X/ C' W5 Q4 I- ^ void cxc();
' d5 j. T8 `* G bool qyu();# ~5 q9 {% p5 \4 y. Y# Q8 Z
void add();' S3 N+ [' r# v( H2 h+ ]
}; m/ k4 S0 m) i/ b1 E5 d' F
void Checkout::cxc()
8 e, O' U7 G3 }{4 h, k# V6 ]. k& \( _* I
for(int i=0;i<4;i++){( g) G i" ^' ?9 H9 |0 W/ ?
ax[length+i]='0';) C c, N9 n5 f7 Q6 |
}
# t e3 @4 d- x" |/ ~}//将输入序列后加4个0" L& R- X3 D" P
bool Checkout::qyu()
& P% R% h7 B3 i{6 x- i) Y2 Z$ c
char c[5];. ^9 t2 v3 f! d+ d+ n" e* h/ H
int i,j,n;' b4 c4 X2 V0 u! V( F
int m=5;! D0 P: i: Y" |: A
for(i=0;ax<i>=='0';i++);
7 h2 @2 r. }$ @" Q3 q7 T if(i==length)
. \. |8 L( w2 t. W {cout<<"余式是0"<<endl;
2 h' a$ [, c- C4 ? cout<<"发送成功"<<endl;1 f/ A. ^) Y# K% h8 u* F7 u
exit(0);9 Z6 k8 z; h6 P( E3 Q w
}
. y- S; n" s* U* N4 velse{
+ r( ~. j1 j' z" M. O' \' F8 |* ]6 F for(i=0;i<5;i++)
( G, W: ?, q" W; L c<i>=ax<i>;
1 _ a4 |% D5 {8 l: j- ? while(m==CRC)( Q6 X* [2 M; D. _
{ for(j=0;j<CRC;j++)
' o1 R! B6 E8 Z7 @ { 5 e( k; j# e7 z- s& z. [7 h) ~
if(c[j]==data[j])
. [( Z$ _/ T* q1 j% g4 d$ A, G c[j]='0';* |! b) q# Z# h( @9 c9 ]
else! p+ @/ ?" U1 ]& r) O- t
c[j]='1';
1 |( g0 `. j# y9 k: X$ Z9 G% s }
) e1 I" Z+ H8 z T2 V7 ~9 d$ [ for(j=0;c[j]=='0';j++);
7 A& b h' l1 t, ?2 G: A n=j;) J8 I( {# a) V# T+ p
for(m=0;m<CRC-n;m++)
4 g7 m: V. u/ r4 v" e$ ~ {9 @! p4 ~# _' U3 c
c[m]=c[j];/ r% q/ f5 ?0 H$ a4 s9 X
j++;
- W Z2 G" w1 j9 \ }
+ @* {0 ~. L. `4 ? while(i<length&&m<5)
( `/ c) S" |% M- v4 G9 c {
2 ?1 v( J4 r1 v3 u! A5 E5 I. d6 e6 ] c[m]=ax[i++];
' {& t6 I. G4 ]: C m++;
! e3 F, b. e- r2 ?3 n }
% j1 K+ E9 ^/ m! i! b( {, J }
8 r! Z' I3 w; W7 ` z}
5 `' P: k: {" y9 m' S5 K) { int k;
y7 }/ B" ?* L* l: p; a for(k=0;k<m;k++)
9 _% ?! r! _' B bx[k]=c[k];
, Y3 x* u1 n. E9 Y$ ~ for(j=0;bx[j]=='0';j++);9 d0 Q ]- T$ ?$ ?/ E( S
if(j==m)( D, b, t- {3 n* r9 a! l) g8 ]; I% l
{cout<<'0'<<endl;
% b1 Y' m% [/ ?7 h. Y+ c( _: _ x=0;
2 K# e, {7 Z# S2 T6 z: W return true;+ m! [8 `$ p/ r$ U+ E
}
( k0 d$ P9 a2 z ^ else( D% l1 t1 H, ^9 l: T8 p1 j
{for(n=j;n<m;n++)
* M+ X8 t. x$ }6 p% o7 k cout<<bx[n];
6 I# j: A; w W0 V x=m-j;6 t* y1 o9 g, D! J/ I* N" e5 l8 l' _
cout<<endl;' {! I: W# P! }$ r# i
return false;$ c# b0 _/ K: ]) }
}8 H/ q3 A6 |. \% d) l
}1 m, D/ K1 Z2 Q$ ]
void Checkout::add()
( m$ L$ p* g Y* o5 J( `' H- J{* p: N; Y7 T/ o7 j1 s. b
int j=0;
[0 b; W$ }3 O- q; A2 [ for(int i=length-x;i<length;i++)
+ w' R6 b$ h6 L0 o0 B ax<i>=bx[j++];
: D7 H, G% _5 _ cout<<"发送的序列加上余数后变成:";
. X* K5 r: E' x& Z for(i=0;i<length;i++)
4 z! [7 }/ d6 r& N cout<<ax<i>;
" J" r1 M/ Y& s" z& `0 D cout<<endl;; l6 A: V( r( u: }
}
* Z& S. }7 p" l( P3 ~) ]' |void main()
/ b: f* S0 o: Z, I7 ]$ {{
: c0 i s5 s/ P, L8 Y cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
: M, f: T7 `/ C; @+ {/ B cout<<"请输入发送数据比特序列:"<<endl;" ]/ \: D) V3 ?9 \& }: C0 ]- E
Checkout test;3 x; N% i" y2 _/ c3 D
test.cxc();
3 S! g( P% l# r9 \ cout<<"余式比特序列是:";
/ W3 c* a! {5 g( M test.qyu();/ F8 r' s+ D1 G0 P9 E; }
test.add();& L/ Z8 E% c/ \9 F2 v" }
cout<<"试试这次是否能被整除."<<endl;. Q1 \% p1 q* z. H: m3 l
cout<<"新余数是:";8 K4 S- c0 q @0 X& [
if(test.qyu())
& m7 L! @, {( ~4 o* `9 ?4 A' R cout<<"已发送成功!"<<endl;
6 T# y; v( K0 ~1 q- i0 A2 t else( x( h/ B9 N6 s, ]9 ~
cout<<"未发送,失败!"<<endl;
% _2 w5 K3 K S* g6 H$ b0 t} |
|