该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
: ?5 T, l0 r" ~: `% ]6 p#include
* t, S) |$ M0 n: K6 Y [9 m#include$ Z# A1 g2 a+ q
#include
8 a+ s& n9 H4 J3 j: ?' w4 H9 @#define CRC 5! w0 r* X% m& k3 s' D7 g( S; T
char data[5]={'1','1','0','0','1'};
; [# J! u4 a( \" y/ zclass Checkout
: {/ E6 e3 W# Q- U{
* `( N# w7 y" g, Vprivate:
* M. e/ x/ b. F/ H; D; r char ax[50];% H# `# G" M P
char bx[4];
' y1 r6 b! b% z$ \' H int x;
) A _- S) Y; E1 m- Fpublic:
2 H* S0 V* w7 ]' L# g( @* k int length;4 V. ^" B) m! T m# ~6 E9 I
Checkout() R2 n5 s$ |2 X+ I% X
{
" q$ {& A& Q, o" f cin>>ax;. X/ D* F0 X' [
length=strlen(ax);
1 l/ Z& [3 l! A% u9 d }
' Q# @! ^, E8 X, v void cxc();$ L+ d/ V( }. R! P5 r$ Z: ]
bool qyu();
! P7 k. d% ^) m void add();: B" B6 A% }0 f) n
};
. E2 F: h4 y4 h# A, ~' vvoid Checkout::cxc()2 A" H2 r4 d1 L, m
{! Y* q5 ?0 @! W. @" i3 K2 J
for(int i=0;i<4;i++){
+ ~ O M0 p& d ax[length+i]='0';& y( q. e/ L3 ?& V; } M7 h$ D% T
}
& [4 g9 I8 q0 h1 p}//将输入序列后加4个0
$ L! V+ |7 ^/ `: k- P7 |2 Lbool Checkout::qyu()5 W( x8 j. z( D0 O$ N2 u
{
& ?( L! b9 X% x0 B9 j7 [- G char c[5];
R! `' |+ K2 D4 q. G. h int i,j,n;
3 a) J5 I+ L1 d( K4 ?' T" ~6 [ int m=5;
# b' G* ~) _1 j4 n0 \* W for(i=0;ax<i>=='0';i++);
, L) j/ q% O5 N7 k! W if(i==length)
8 Z$ y) D2 J5 |/ L3 n. a {cout<<"余式是0"<<endl;3 Q6 F2 T, E5 C' R; y" u; f1 {
cout<<"发送成功"<<endl;
; _: F1 F, d$ a8 n+ Q exit(0);$ R7 n: h* M9 z' F+ R2 S5 a" i# F
}
# R) m1 }# y t2 z/ Velse{
; R0 U k1 k& j3 Z( x- s for(i=0;i<5;i++). M4 x; j* d9 c, Y0 `9 k! u
c<i>=ax<i>;3 V, v7 l' K! _6 m- Z8 v$ M
while(m==CRC)3 {: h! \8 x/ B- e- i2 Z
{ for(j=0;j<CRC;j++)& q% e/ j0 G: @- t7 g7 q" S
{
4 p; j) T2 `( F' ^* l) L) _. G if(c[j]==data[j])9 L' f6 m# b- r4 q+ Z. m! Z
c[j]='0';
% P+ a3 j3 @5 V. E& Y6 Y else+ c+ D8 x6 q( B" p
c[j]='1';. ^( p7 S- r% R% R: m2 G! D+ ]4 @
}
9 n) I1 x% e3 `# v+ s for(j=0;c[j]=='0';j++);
2 s5 e4 G) V# D: S n=j;& } z+ X# ?+ ^; t' M
for(m=0;m<CRC-n;m++)
4 q. Y2 c+ B/ u1 Z {$ e. q: {/ m P" j) I; A' O
c[m]=c[j];* ^9 s/ {! o1 V, j" _
j++;
. ]! G/ E" Y' x7 r7 _" A4 ? }
% C% L/ W/ ~6 U1 h3 Z" z0 v while(i<length&&m<5)+ d8 ]7 |# `' E" N+ U; r5 k
{
/ C2 v9 m+ V& i c[m]=ax[i++];
: M- y4 X2 v# d3 V+ X. d m++;
+ M8 R4 \: h4 l. S }
8 s8 t$ Q. K. n j' D8 Y1 y: D }
# f8 a: C6 M# ^3 P+ a& }}
' Q$ w7 F% f% Q int k;( h" f$ a$ r* a R2 H
for(k=0;k<m;k++)
" b! T2 I( O. t2 l: p7 S9 C bx[k]=c[k];
# V0 i O1 P; D9 ^& r! r for(j=0;bx[j]=='0';j++);
0 N' m4 ?/ E5 b% F9 Z% U, x) B if(j==m) I* t( L( w; {" p! ]0 k0 O/ u; K. R
{cout<<'0'<<endl;2 E5 l, G& d( g [9 A+ X
x=0;
K C7 P# F7 D9 ` return true;
9 R1 a, _1 }$ s) C }
2 g/ A+ ~2 G. h else
. q2 P7 t$ @9 F/ d/ R {for(n=j;n<m;n++)) [) z7 O2 {' @- Z; L2 r
cout<<bx[n];
# b, g7 {: L0 C$ c2 g! y! Z/ K x=m-j;1 A3 O& a) M/ r
cout<<endl; `" }& g/ I" I# F, n
return false;
+ T( t1 q) j. r' B }. c: k/ {$ E0 I/ \) g, h
}& H0 q5 I* D, r3 l
void Checkout::add()
+ i5 F( m; \2 L, F: S* M$ x{0 q' Z; P) c( v$ U5 O2 Q- t5 Y4 {
int j=0;/ M. }* n- l) ?1 R# c% c- C
for(int i=length-x;i<length;i++)
5 g8 m% L( u | ax<i>=bx[j++];
. q8 {! T6 Q4 h+ _9 ] cout<<"发送的序列加上余数后变成:";
! x: f2 R3 u6 ]) _ for(i=0;i<length;i++)
3 F4 O A2 b6 o' Y: o2 ~ cout<<ax<i>;
: c' ?/ h K( n+ ]. @3 J6 n+ D cout<<endl;$ }) N& H7 ~/ y: J0 O) _
}% }- ?& J6 |& q: n/ c( U& k+ h
void main()
. k/ s6 l; W# K/ n* [8 O4 W{ 5 B% U1 U+ m8 {2 @% z8 u3 x* m
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; - _8 T9 c6 T2 w, o G4 E2 m
cout<<"请输入发送数据比特序列:"<<endl;% y' Q9 W$ F9 ^" A* b j
Checkout test;
2 L+ ~& A4 H" e0 q6 O( M0 F test.cxc();7 A$ X. |- p6 K) Z
cout<<"余式比特序列是:";( Q( N/ C, W; m0 G( y: l9 u8 w
test.qyu();
8 g: Z1 v, k) a' T2 W; O; k test.add();+ r5 z' P* N2 l; G
cout<<"试试这次是否能被整除."<<endl;4 T$ h5 l% Z1 y! C: o! r
cout<<"新余数是:"; b, b% ^' _2 t3 F9 L
if(test.qyu())% L! M- r0 A9 B1 J* G6 U* r+ p
cout<<"已发送成功!"<<endl;
" I- d- g& e7 t2 }" }- O else
0 C! \4 z; c0 U5 g' `' I$ D4 I cout<<"未发送,失败!"<<endl;9 t% [, z9 A+ c! N6 s: U
} |
|