|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
8 r! _- B# l" X Y+ Q5 w9 B2 v* k#include
: T5 X& B! V7 L4 X$ Q( j#include
# Z9 R/ q: Z# E" H' C8 g2 k* F#include( |) W/ c8 A$ c7 h% p
#define CRC 5$ M) P" {1 p/ q$ h1 Q
char data[5]={'1','1','0','0','1'};$ t: g5 \- A8 g: c3 G, A' Z" ?9 h6 s5 H
class Checkout
, Z7 ?: o' M; q& S5 I{# ^1 D, x h/ A# m' b! q
private:# ]% Q: c5 r7 E& i4 N* q& |
char ax[50];8 l% q: J2 t) J! M* A
char bx[4];' w2 F1 z! s+ [; D
int x;
1 {: X2 ]6 k6 t n% |public:
9 \8 Y$ X8 T; c1 |( _ int length;
, E! V/ C: N) ^8 i Checkout()
1 n/ {# I5 p! ~( i3 k$ f" t0 ~ { + f# v7 A$ J; [+ I2 |
cin>>ax;
" ^! S5 k) X& l& ?! t3 @ length=strlen(ax);0 }7 H. n9 \' y) M
}. L& x& Z) ?2 _+ ?* h H! Y
void cxc();/ [5 i5 k" u K/ G- W
bool qyu();3 q6 {& e2 A1 x* F& E
void add();% e7 R A! ?2 d: ~- x0 V
};
1 z" n/ H2 l+ K( O5 @1 Lvoid Checkout::cxc()$ K% N. q( s" e, a$ n2 h
{
; ^9 @) }" e- h1 b, V( d for(int i=0;i<4;i++){* @3 P& V0 x: Z+ {
ax[length+i]='0';
. V. p2 p! ?( g" f) x } K0 d5 ]# D2 ]& W- t& Y s
}//将输入序列后加4个0& u8 k9 P& K8 x0 _# c; K1 I" Q
bool Checkout::qyu()
" i( I" ]/ D7 _+ W3 ?% c{
0 g6 ]2 u" V4 \/ G char c[5];' q! s, }0 Z* g% r- D* f& g
int i,j,n;
9 ?+ l5 {. B( m) b6 R9 d/ H8 { int m=5;# s# k0 X9 T3 G7 r6 |
for(i=0;ax=='0';i++);
2 x' P$ a; T7 u/ m8 y if(i==length)4 R1 t! g F- V* }. W% t( D
{cout<<"余式是0"<& R$ N" B0 y8 v% c7 E2 }/ N& t
cout<<"发送成功"<7 N' r! T* W' T, n: e9 N5 @7 P exit(0);7 n/ _5 e4 _) g3 |: q
}
& a- R4 n$ z1 _else{4 L- F+ p4 f: }/ g4 v' l' H
for(i=0;i<5;i++)
& s! M: Q9 c# g! M" G; a c=ax;
Y0 H' h0 ~1 j, }# j' o# A while(m==CRC)' X$ N, A8 B4 S. }
{ for(j=0;j, X- l/ x0 r! @3 m% _: X* { p { % x. n5 z% g$ w. H- O% Y
if(c[j]==data[j])# A# {5 ~5 z/ g5 g1 p+ H. C8 k
c[j]='0';5 m; X: T" ?# o+ `
else1 {: ~, I. r' ~
c[j]='1';
7 s$ _, h8 [2 ]$ k4 ]7 g/ h# E. q }
1 h) L+ z8 i6 R1 | for(j=0;c[j]=='0';j++);# |3 G* z; Z/ l5 t
n=j;
u/ K. V/ A7 @3 {) F+ ?1 ?6 f6 e for(m=0;m& ^8 O& G. }6 z$ E3 I# g4 O3 c& S
{
; r0 C+ ]! M( l& c' _/ G9 M% r# ] c[m]=c[j];
1 R0 C+ l5 B: O j++;, q) N1 z7 ~) C- B
}. \* Y. X; b$ D
while(i7 @/ I. ?8 n- I! E- k& E! c0 ?+ }
{
V1 Q0 Z! P# L* \" `5 ~ c[m]=ax[i++]; $ q/ h# X; L/ k$ d. U" F( F4 `
m++; . G# ]) H: R- K( x0 |
}
5 W4 j! a; C) F1 h0 l2 C }! ~* T6 L; s0 E1 g1 p# n2 E+ R
}7 L' X0 T' R! @
int k;: ?0 q, g5 a! M2 y
for(k=0;k2 r0 M! x# j4 l) X( e( A7 b bx[k]=c[k];
0 E5 {8 K p* {& i for(j=0;bx[j]=='0';j++);$ N+ v8 s0 R$ n* L" s% m6 j2 V
if(j==m)* a) V, Q+ p' r* E$ p8 C
{cout<<'0'<9 z) G. ~/ X; O [/ [) k/ k
x=0;
8 y8 G+ Q2 y/ c; a9 | return true;
4 l$ k4 M9 ~4 Q9 F/ ]! m5 Q4 ~ }' m5 B- U. E* X1 t3 F9 g0 x }
else
9 {5 x8 P9 s; q {for(n=j;n0 I% F. z% B q8 x% g
cout< `. J, ^" F2 G- b6 h6 G' z, H x=m-j;
I) T2 S5 C) }- J cout<5 ], `, [" Q+ B) m# E/ ?
return false;+ o! g3 }. U, O# i, d
}
; _+ R7 [ s) k! n7 J: G* {- @8 l}; V! k7 C* A& M
void Checkout::add()
' X" T" A; N6 y2 u K{
. \. X% j) z: H% x, Lint j=0;; W+ Q# r" ]% V8 h* [
for(int i=length-x;i5 W; L4 n2 K. L x/ y5 L4 M% y8 ? ax=bx[j++];7 u2 g: P, V/ l, r; G
cout<<"发送的序列加上余数后变成:";" E: B9 q9 h' r/ H+ C# N
for(i=0;i8 s3 P/ p; u! c& A% X
cout<;; f' y7 v% _6 a( \4 {, u
cout<: m, j. ?) Z% G1 v J, A}' F8 z4 b" w+ o* z w) a7 H
void main()
) y9 j! W5 G. h- L u' \{
; t+ W9 e' }5 A/ B3 l- u/ |% d cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<+ i. i' R2 \/ E- S* S2 J
cout<<"请输入发送数据比特序列:"<2 z; h# n& ^9 A8 d
Checkout test;9 u5 O; M4 o# h* B" L+ X4 m$ S2 a
test.cxc();
5 R/ s1 J5 K# l cout<<"余式比特序列是:";; B$ S3 E% T4 q$ |, C
test.qyu();7 S1 ] @. ]; Y" y0 ~4 p
test.add();! s) W# R' X6 l" j6 \$ C
cout<<"试试这次是否能被整除."<. |5 s" @; t5 R0 Z# w cout<<"新余数是:";, s' M/ i; Y- E& d
if(test.qyu())
$ W1 @; ^7 l- a3 r6 L cout<<"已发送成功!"<3 s, ]8 L- I3 H* j+ F( M1 c0 b
else9 G T. G$ |$ l6 A, k( d
cout<<"未发送,失败!"<1 h' @! t) H4 F} |
|