|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
4 [. c1 V: _$ w O. o6 u+ o. O#include T& L4 z; U6 X) y0 M
#include
4 y H/ S; W% Y1 a$ q. B( _& ~#include/ P0 Z$ `0 f1 c
#define CRC 5 D& B# N; U, j; ]# W) F2 q$ i
char data[5]={'1','1','0','0','1'};
! k$ k" y. _9 M z. L" c& sclass Checkout1 D; a2 K5 F9 |
{
& L7 m0 x. H$ \private:
+ |) q2 f: j$ p. L% f char ax[50];1 k; b' J" p! C: M
char bx[4];
1 o0 c* k( o# C u) b" y; J int x;0 o, S; A+ v/ t0 j( t7 R
public:
% V! ?0 H7 j$ |4 r9 u+ E int length;
; {+ w8 |% D+ r$ g3 f" m+ M6 w Checkout()
0 F5 b5 E* N. T- T; |+ j { 5 r! H# H5 h/ X
cin>>ax;" a9 z8 a: g. a+ E
length=strlen(ax);
3 h7 b, h7 b4 S# }, h3 Z$ {1 L }
+ F/ d2 D6 r9 k+ s1 x% a void cxc();4 U/ j" F! o2 y. I1 ^! V. `
bool qyu();
* C9 V( v* ^& r$ j3 X$ S' @ void add();. b- ]$ u. o. O0 B# ~
};
6 ~% }" H( G; G y1 D- tvoid Checkout::cxc()2 E7 j6 B5 H! f# [8 o
{
u2 O) h* b; O- A1 C O& u for(int i=0;i<4;i++){" F2 {: W( A, B$ P/ K7 z
ax[length+i]='0';
/ a4 H7 r6 F) s8 G/ J }0 H, d# [! i1 r' L) z" }# G% Y5 {
}//将输入序列后加4个0# P! ~9 _! F- @: v
bool Checkout::qyu()
1 x/ O9 ~4 z1 Z( u' l& b: {' H{
2 q" _8 i* h1 T, [6 S% N char c[5];
( N# N1 I! r# q" F int i,j,n;
5 _" ^7 o1 B" F5 `! h3 t int m=5;
* l/ {7 A7 \ y2 D7 F/ F' c for(i=0;ax=='0';i++);
7 A9 s/ W+ X! |1 B1 M! V1 [ if(i==length). z' |' Y5 k/ `
{cout<<"余式是0"<% Y/ g0 L+ y0 `& V$ e$ @% J8 v( Q cout<<"发送成功"<+ u* a0 u+ g$ G; [4 r$ g. b% Q( ~0 d3 c exit(0);
: u# o. d# u; g: W t }
2 S2 P6 p+ J' N* T- r/ Q% V8 [4 Xelse{
6 O d6 W3 K7 n+ m for(i=0;i<5;i++)
( D% f8 G9 P, u0 \7 b, B c=ax;2 v/ a" K# w& J# |
while(m==CRC)3 [) `( p6 h0 x+ m# p8 e" s
{ for(j=0;j/ M2 ] {/ z! c' o6 o) E
{ ! J- `) I" G4 x
if(c[j]==data[j])
/ ^" r4 m, [: a" t+ e% Y% ]1 } c[j]='0';. e9 k# e" ]0 F6 V- @: [
else
1 x5 _/ o) r o. e5 o6 f8 U, C c[j]='1';$ H8 F0 G( M: o# U5 @7 B2 U
}
( T) T9 c; m: J f$ T for(j=0;c[j]=='0';j++);
7 }! z4 U4 w% i$ ? n=j;. d4 v* s0 [* H8 j) A B
for(m=0;m, N6 ~' n9 Q2 }' m# s1 L" b ~ {
2 I8 o9 x0 x! W: [ c[m]=c[j];
; [, i- \ F6 x* u' H j++;9 C8 r4 M: y8 ?
}
5 f; `1 O" m8 R4 G- i9 X while(i% [6 w2 v9 [( l {
" S1 Y _% w: X J( y% f/ P0 F c[m]=ax[i++];
- _( C4 ]+ m4 D# m m++;
% G* d# E J& o" H; J }) A# a! v8 n! K* `" V
}7 T% K; X1 E" I% w& z2 a
}
9 I+ ~. w# Q6 l7 s: } int k;
! ~! z+ m) @: B& A, I! u! M for(k=0;k% ^( h8 H7 ?: C8 h& O/ N
bx[k]=c[k];
+ ~' H5 t0 n( p0 D h$ d) _ for(j=0;bx[j]=='0';j++);
' Y/ A J7 ^# Y: N6 G, K; | if(j==m)
0 J- P9 q7 a5 `% `! k( U5 \* X {cout<<'0'<' l5 Q3 t7 \3 ]# p3 Y' `* n
x=0;
0 ^. R7 F; d6 A" H: w- N4 z return true;
6 s: G) T' Y/ i3 m6 E4 O" h5 x1 o6 d }& O, q9 J6 H9 V, q v: a5 p
else N4 N5 T3 d5 _8 J" G% h
{for(n=j;n. m$ v: L8 `# c3 O) U/ u) [
cout<# L8 a$ R9 }- ~8 @
x=m-j;, ^0 v0 ]4 k. F( K9 b" I
cout<' @" f. F: o. {+ z5 H) W* L
return false;9 D3 c8 i5 t4 t& K% q( C+ W
}$ ]# K: l0 q d. {
}& Y. X$ h9 Y7 E) @! F" O2 g% J+ K7 U# u
void Checkout::add(); Q! P9 L- P8 W& b9 t# Y7 U
{
* i' t) K) \( |1 r. Z& K/ }/ @int j=0;
$ F" M) O6 D/ r7 ^ for(int i=length-x;i& Y3 P: S6 C/ t4 Y! B0 q
ax=bx[j++];0 d3 e6 B W, Q* C
cout<<"发送的序列加上余数后变成:";
5 n9 w3 y$ z3 S for(i=0;i' O. n$ ]! ?. B# K
cout<;. S6 }& w/ x: u1 Z; r
cout<1 m' ]; \2 |: `4 z5 n. I$ @}
+ d' P1 X: G& \ dvoid main()% ?) H8 p) ^+ ` E
{ ; R- d5 Y) S6 C& F( J8 S
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<0 k) j+ r0 [. H l# |
cout<<"请输入发送数据比特序列:"<' B! m1 L3 B& _7 ]- ^4 N
Checkout test;
) ^1 z2 s& z+ F: U4 | x6 M9 J% K test.cxc();: }6 Z( D" F- _ L4 j0 e1 c
cout<<"余式比特序列是:";6 f4 o0 ?7 c# p" v
test.qyu();+ R! { @0 `4 Z( b# ~6 F
test.add();
% R0 e; d+ R* J; v$ C' K2 v cout<<"试试这次是否能被整除."<3 O d& w* P' g" @
cout<<"新余数是:";
1 i- l1 [+ ?0 B% o if(test.qyu())
4 B$ \+ C- m+ _0 ` cout<<"已发送成功!"<3 g2 }; g/ B/ G! _, `
else
2 H4 J" `7 D+ D+ Y( X5 t3 G; M cout<<"未发送,失败!"<6 t' O f- `! y' ?! T. W} |
|