|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用7 \1 L) r- G3 f4 O
#include% O3 `! ?$ w; @, ?
#include
* ]0 a2 }! V+ f; c8 V& j) V; C3 j#include7 d5 v. u- G) B$ r2 G1 k; k W
#define CRC 5/ P2 `) w( [* `1 u
char data[5]={'1','1','0','0','1'};
; W% o3 ~1 E9 r; eclass Checkout
( h) r* J; ]* \9 G! P9 r{2 j1 F, e+ @% E5 D! c
private:, B2 S9 E7 n+ Y+ X2 K I+ Q
char ax[50];
, q6 S" S* M |& H$ }& E; a" e+ O char bx[4];
( H7 ^' k: V4 D, f: } int x;
[# ~& V P6 k4 C+ }3 M$ Opublic:
3 `' D$ O% J" s5 ?* x int length;2 f& h- X; G8 X; B- g- X: u
Checkout()
% H6 a/ \: u2 {4 [. Q. I2 f4 K { 5 w2 e7 u) d7 }! Q, f
cin>>ax;
+ U, _8 b; j. C c3 w length=strlen(ax);
$ M7 }. l& s8 }- t7 B5 x8 f }
) W- Q- T* Z* a9 _ void cxc();
2 k' s0 _/ j- r z% Q/ X bool qyu();
' e9 v: E- B5 I: G* y1 ?) T void add();
8 @3 P# U$ |! c! z+ ~0 R: a};. }5 W# \$ A3 n J1 u V/ M
void Checkout::cxc()! i) Z7 x$ j5 P2 \2 `: P! f
{
5 Z% Y( X2 c" o6 z5 s4 j0 M for(int i=0;i<4;i++){
+ d4 V2 o( }; Y) J5 U( M ax[length+i]='0';5 M6 w" [* J! U0 @$ e
}! ]1 I1 ]& j9 G0 E+ O
}//将输入序列后加4个0
( u- c: j M% Tbool Checkout::qyu()
9 `0 |, U& A' U" M" ?{
* _6 D, _( [9 G8 |# j char c[5];
( g6 S2 @! N- ~4 O int i,j,n;
1 R: @2 {! i) T. q; d: p int m=5;/ d/ p7 v1 _+ g, ~/ O, _
for(i=0;ax=='0';i++);
: k2 F8 q' G" T+ _2 @4 b6 | if(i==length)- L* m2 c! v- n Z
{cout<<"余式是0"<( W0 d( C. y F9 {. u) q
cout<<"发送成功"<0 H. s! P9 ~& s! H' u! }
exit(0);) _, O, s* e. b# |' k& l
}: y/ |5 Q9 z- N2 K- z' h
else{
: H8 q+ w, j! G+ U for(i=0;i<5;i++)' h& x( X" Y: S# |: \
c=ax;. C& H0 r* F2 [& k f( b: d% E8 v
while(m==CRC)
j1 L' [: D5 ~- @: K! o$ M5 S! T" M { for(j=0;j! _ T# g( [8 X: _5 ]' \
{ * g$ ~9 W( R% _* w
if(c[j]==data[j]). j" u" y+ V/ z5 z
c[j]='0';
2 f& R5 q0 N0 X8 V; @ else
/ _6 V K% p" o: u) Q0 u& B c[j]='1';
D& w& o" U: A1 r1 B } }- a3 t% K. U0 w8 [6 @ \
for(j=0;c[j]=='0';j++);
9 L$ }4 L- Y3 T4 c& Y! F; k, j( J n=j;
- l1 q- p7 c! x( S# R8 w2 ] for(m=0;m+ Q* i! @5 o1 O! r9 t. k/ C5 N
{
% L2 Z! J: ]* H# q U+ } c[m]=c[j];0 \1 R8 S8 ^! U4 L0 h5 {
j++;
3 @/ l" Y2 i1 I" m }
9 H- X( v$ y, r I while(i+ c! ^% y ^; `
{
/ \( f8 \4 q) P% Y0 ~+ K3 J, ]& T c[m]=ax[i++];
% Y, b7 ]4 w) j4 t& F4 m7 K) L m++; 1 Q7 ?1 U) _4 w% a4 A
}
7 \% ?; b m8 t; L" M }! R) T3 u/ r0 H
}
" \3 l p# L4 m* C* { int k;
2 m3 R* A* B: x5 a for(k=0;k) s$ m% g g6 b' I: y+ L% N# P
bx[k]=c[k];/ J8 d# S6 R; t% Y9 A" Z
for(j=0;bx[j]=='0';j++);
9 G6 }- ?( M7 v9 g/ i" ] if(j==m)( E7 F9 @$ o0 w; k
{cout<<'0'<1 K3 Y, h: V) U/ A9 ^0 e
x=0;
7 d- z# t( E d return true;
! _( q) L, t* f }( Q7 u3 m8 Z' k
else
2 y1 L( m9 u: u {for(n=j;n' n2 t+ i+ ]& |2 D7 H cout<) p2 R/ m, r8 v' i1 ^4 S x=m-j;; _3 h l z& L' x
cout<( ^ O% n/ q& G b$ e5 D1 W' j P( O
return false;4 I4 K& a9 S) X7 F3 t* u
}
5 M4 Q$ {& g& Q: p}
4 D$ v0 Y4 \7 o" }' k& uvoid Checkout::add()
t* i5 P V! X$ x9 L{3 R6 g& A5 [$ X( @7 B( r
int j=0;
* M% y. s, M# n: V3 W: V( W for(int i=length-x;i# R5 Y1 w! D) G' K0 h; p ax=bx[j++];, A1 `6 A) y% |2 T; n
cout<<"发送的序列加上余数后变成:";2 T; |) y8 ~6 _) V* x
for(i=0;i( U9 U2 [5 F: c/ o/ Q* ^
cout<;. t9 U4 _8 C5 m; n& _
cout<& s& s A; X( W% g8 v) S
}+ I1 y, [% l. P, [
void main()
4 ?! h, a! W6 e{
) e# L- q$ i, t# C/ D. {& I cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<% H. S. c: Q$ e6 A' d
cout<<"请输入发送数据比特序列:"<6 j3 {8 X, e8 r1 {( n/ f Checkout test;
0 i1 T$ I4 k6 P4 N5 Z test.cxc();7 e3 {, `3 M( a& q0 w* T6 c) M
cout<<"余式比特序列是:";+ q& ~9 W2 D4 o9 r' U, ~
test.qyu();$ U1 c5 |2 A* N( Y- n: v% t: m$ H
test.add();
. ~, y+ }7 q* U% w( }6 A cout<<"试试这次是否能被整除."<: F" Q9 M; n! i1 I6 u) B' `; B/ _
cout<<"新余数是:";5 X8 R0 y) q' v
if(test.qyu())
+ L6 f$ b% g7 h% p+ O; C cout<<"已发送成功!"<" X: U' T3 K3 J2 e2 \* D
else
* Q2 ^# p, M. s cout<<"未发送,失败!"<* J7 I% E& Y% a, k2 ?. f; b
} |
|