|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊5 U8 T- S( N# ]! u) y
#include
9 k3 R# O( _+ r- T) x6 s#include
1 T9 C( v* r, O' O* U4 A#include( y! _; F; x' Y/ B! X$ h
#define CRC 5. i9 Z7 k3 u$ s* m5 [& i' R% D
char data[5]={'1','1','0','0','1'};
6 Z( i: w* k" g4 A7 H; r _class Checkout
1 n5 \/ W- i. h- ~, @ |$ _& w{$ Y% Y4 H+ U3 r) R" ]& `
private:
% t- ~& V7 f# Q" F* D0 g char ax[50];
) R6 n4 z- h0 D$ f" V char bx[4];, f! U. k F$ M, R# H3 x, h
int x;
6 Q8 T3 j7 m: B; `( x+ Vpublic:
+ B) `& N( P% y/ s% a. ~ int length;
8 U- S5 z; p0 ~ Checkout()
7 b* I: B2 R9 H$ J3 B2 `! v {
. E0 [+ A- Q+ v cin>>ax;0 u. |) D8 q4 O6 K: F* V
length=strlen(ax);- P0 y4 |# V5 C8 \
}
; e- P4 i2 h. w; ]* ~+ F7 h# k void cxc();
3 _3 w6 U8 c/ f1 k% a bool qyu();) `3 \4 m9 ~& n$ h
void add();
1 }. }# Y( ^; b8 t: ^};- O c, e# S, |/ c4 p& v
void Checkout::cxc()' N: Z$ G2 P8 X& C3 r2 y! i
{* f/ M8 g9 i! O$ w/ A
for(int i=0;i<4;i++){3 t1 o9 G. b1 M+ n% c6 n
ax[length+i]='0';
' c: |' x" b/ e" P }2 M5 [: j F/ H9 C1 b2 K
}//将输入序列后加4个0" o& {' b2 g5 i: |- }. V
bool Checkout::qyu()
# [) e/ f. n( e{% R0 v+ j4 l: M& W X% _
char c[5];' k1 h3 I8 e7 u/ @7 {" \
int i,j,n;+ }$ p5 N$ G4 k4 Y
int m=5;
2 }' d M' a0 c+ ` for(i=0;ax<i>=='0';i++);
5 G$ {' R4 ]; C, O2 m if(i==length)! S [7 y8 N( x; H; d Y2 t; g
{cout<<"余式是0"<<endl;5 n4 k8 D6 j3 p( x( s8 I
cout<<"发送成功"<<endl;
. L: m/ u. S/ R4 N: y exit(0);, K3 I8 s Y' ^: W4 f' x
}. g# s& n# a, T$ Z6 | Y
else{5 t+ H3 _. j) z# l7 b# z1 V J
for(i=0;i<5;i++)) E2 A) W; @7 E7 @/ J" W' e8 b# z
c<i>=ax<i>;. y. I' `* j1 Y/ c D0 l
while(m==CRC)
2 s' a! {# b* V6 F) o7 x" h { for(j=0;j<CRC;j++)7 P$ h' k0 N0 D/ I* C
{
1 H7 F7 Y8 B) E. V* X O if(c[j]==data[j])
r" M$ y6 e- K, Q c[j]='0';
7 _. s$ A$ M6 Y( ]; D) \; h else
8 P& }& `7 g* C$ A c[j]='1';% s3 W) q/ q5 P2 m
}0 F/ N- d. r j! B- x% G+ k6 [
for(j=0;c[j]=='0';j++);
. e8 `! v# D: n6 @ n=j;8 G Q) y1 B5 ~ j1 Z0 Z
for(m=0;m<CRC-n;m++)) x0 g& B! q/ e6 \* b: X0 s
{. K5 t1 n; O7 C
c[m]=c[j];
6 \ h# y' k! u1 e j++;6 l3 J/ I( q$ ]6 q
}! ?. `+ x) Z0 P' a: m. \6 u
while(i<length&&m<5)0 i Z! r3 }* W+ d9 Q; M
{
z+ T7 J. ?. p c[m]=ax[i++]; 0 J* d- W- {; |* g* ?
m++; , Y$ V3 i$ m! c/ j- j
}; L& E1 B0 X! v1 T0 V1 C
}
% b& S8 S- @6 e, _9 b}
% d# D- P" m; U5 }7 a1 H int k;
* l. E) @1 g5 M* | for(k=0;k<m;k++)" V+ g$ F% c( V5 R/ y7 X% t
bx[k]=c[k];) L" C0 b# ?5 r( \: D# I3 Z
for(j=0;bx[j]=='0';j++);3 n) M. W& H3 w q3 S( M' J4 X- Y
if(j==m)/ S4 H( {7 M, ^$ k
{cout<<'0'<<endl;4 V, @4 o: |" X% u
x=0;
) U8 `" V8 k Q7 c; l; C# J8 X/ n0 ]9 l return true;
* O1 Q) `4 d2 f }% d, @4 {% _! ]% {
else( n* E9 S* V8 c/ P
{for(n=j;n<m;n++)5 o3 t* i# R" E' z
cout<<bx[n];
+ q+ P( w. e# V x=m-j;5 U' f w1 k' W- K3 b) o% @
cout<<endl;( }# b3 c/ Q }8 x! T% p i9 }) I
return false;
+ A# m. O5 T6 e }
8 M! w8 m0 V9 i7 u9 R' T}/ a) |- j: e, d3 Y5 e- h
void Checkout::add()' p' s8 T- j- \7 e/ B$ U: X
{$ d! b; \ J9 L% t8 I/ `5 h
int j=0;7 h$ l% H. M8 ^8 S
for(int i=length-x;i<length;i++)% }8 [' S3 _! |! Z6 n
ax<i>=bx[j++];9 Q0 {0 ~6 W+ n0 k- v- x6 c: G- y
cout<<"发送的序列加上余数后变成:";
$ u3 g# c+ D; N5 V for(i=0;i<length;i++)
* J A! ]/ y+ U: R+ B cout<<ax<i>;- I, x% j* v4 r( l$ m
cout<<endl;" Q7 T9 c' @( R: y6 ]
}
[1 x- }+ C$ jvoid main()# r2 ^$ |0 I- m3 G/ O. _- x
{
" b/ I: j1 w" X. r# P4 `, g cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; 7 ?% z6 R: p5 q4 d& H. r
cout<<"请输入发送数据比特序列:"<<endl;! @( I5 O2 Q% P- C- I
Checkout test;
& p: W+ G" z/ g1 W test.cxc();& X m4 G! M/ |; z. s% p0 Q
cout<<"余式比特序列是:";
* {" m, Q* B( X* E test.qyu();
, G9 _# I; c- F+ A+ ~: u9 K test.add();. m- _" }1 g7 R- O- a
cout<<"试试这次是否能被整除."<<endl;
q$ o! \/ z2 M P" J cout<<"新余数是:";4 G( V/ b7 Z. V5 f
if(test.qyu())5 ^3 U8 o8 y6 A3 F
cout<<"已发送成功!"<<endl;! i: |5 w- b( N
else4 y1 X: }2 s$ n
cout<<"未发送,失败!"<<endl;
, D% m( H, r! f, o+ z} |
|