|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊& J) h/ R: w# t/ _) D; f7 S
#include<IOSTREAM.H>
6 n9 C/ d G% a. o* Z: }$ P#include<STDLIB.H>
. F" d" T" r' d#include<STRING.H>
! i4 Y; c7 y( J1 q#define CRC 5
! [* P: o! {! o! y( Schar data[5]={'1','1','0','0','1'};
0 ?* j& V7 c4 X6 Q& sclass Checkout
, A+ O! y* q! ]3 W5 `{& \9 c' U* k X) `. X& q! T ~; D
private:
7 I5 v- |* s. r: @: Uchar ax[50];
$ ]; R0 ]. Z q; p- cchar bx[4];
3 Y4 z& t" O; M4 Uint x;$ F) i3 q( V7 j7 }; Z1 v5 b+ a
public:
; S* i6 X5 i" S7 B% z* rint length;) z4 T/ G* J0 @! J* z- C* c
Checkout()
% T1 u) H# c7 x8 s" ]2 c& W{
; y( j/ y0 X7 b F" _5 c cin>>ax;
+ b% y7 C! j& I$ l! |0 K length=strlen(ax);# @- g" L T9 b( x; j5 F
}
! |/ F, b8 U( x" W- W0 ` R, N Nvoid cxc();
8 F5 Z1 i1 h: ibool qyu();$ u: v3 U! b2 v6 }
void add();1 \" b' j: x2 p8 u
};
: [! F$ v2 I6 S: d0 g( [+ b4 svoid Checkout::cxc()
& L; Z4 H: ? n" m3 ?7 U{* C! N# v+ J: D% p
for(int i=0;i<4;i++){) l1 e$ s4 }" E$ l
ax[length+i]='0';
4 n2 L O6 B& u' H9 f& M}. B/ B! g& u# v8 O' I
}//将输入序列后加4个0% V# p4 p* w, Q. {6 F* q$ [4 [3 I
bool Checkout::qyu()% [3 w7 d4 Z% K& h: q: d
{
% Z, Y" `4 L) h# Y9 Gchar c[5];5 Y) v& a1 Y4 a( A
int i,j,n;5 o: A! t* \! B* u$ @
int m=5;
" {; Y1 B4 ~( H# Y5 n: H! Jfor(i=0;ax=='0';i++);
& w) I3 w+ |! d. E3 F8 U- n if(i==length)$ ]& t: m* t6 W0 R# \. |3 U* g
{cout<<"余式是0"<<ENDL;! A1 O/ \& }9 O6 g4 @
cout<<"发送成功"<<ENDL;
, t& ^3 P7 V$ Y2 s exit(0);( B% D9 l8 H; `0 b0 X7 w+ s9 U! h
}
: |- w; I( |* H* Qelse{
9 M% |7 I% l, N. v6 p% T6 ofor(i=0;i<5;i++)" j# V" N, h4 U: e% e+ f
c=ax;
- X( ]% u' K. J$ ]$ F3 q q6 n( mwhile(m==CRC)
- m) d E2 o# ^# J1 S{ for(j=0;j<CRC;J++)1 H. d* B% k. k9 ~$ J1 q
{
2 n* _2 V* l6 w u( a if(c[j]==data[j])
6 k# B% ~5 l, h c[j]='0';' |, p- Z: M! v6 S
else
9 T- n( x5 X- p& D& ?0 ^ S c[j]='1';
* m9 G8 i" X, f' g, E L9 W% d }
! K9 E5 M! Q" A: I0 k# @ for(j=0;c[j]=='0';j++);8 |2 m2 P+ X7 w
n=j;
1 U G- k3 S- x$ U for(m=0;m<CRC-N;M++)) |8 @7 m! O8 r9 j$ T b0 z
{! X9 v1 j! J L* d; T, @. t
c[m]=c[j];" ~, J ^1 {' u# W
j++;
5 J% t7 C; H. f O$ A, D Q }
% R9 z+ _( R: p9 Q while(i<LENGTH&&M<5)
- V% x, l/ x- G; w {, |5 l. l& S- ~1 x3 }. S
c[m]=ax[i++]; , |0 D( o- a3 x* |$ N
m++;
4 Z7 p6 k: n& |! W; x4 w" w }. `: I0 s' Y, S* S/ Y+ C4 c
}
$ ~5 N0 n0 [% p; w3 e3 n. s3 i8 N}. r- h9 G( \! o
int k;
! \/ p: S) N( y7 J/ E- z4 Nfor(k=0;k<M;K++)
. w$ ]( ~0 F. w, Y* Y8 j bx[k]=c[k];# u- p2 p+ ]6 p$ C' ?; v8 v9 C7 ^
for(j=0;bx[j]=='0';j++);8 ]: ]2 \* h2 e# M! N: t
if(j==m): z% K2 k5 y. a
{cout<<'0'<<ENDL;
1 r' E1 r/ R' t- T7 x( k; Q/ y x=0;
# G& W, }4 T$ W. I) S% ?0 r( I return true;7 N& Y9 C! ]6 i# P) b# ~8 C
}
T" d+ Y$ H# L% l- Z+ ] else3 c7 K2 h2 Z6 e4 I
{for(n=j;n<M;N++)% M1 M2 O, {! T% w/ ~
cout<<BX[N];
8 M0 T- t' O( y) X# I x=m-j;! a+ i$ |( @1 m& H0 }+ w2 F7 g
cout<<ENDL;
, ]5 a0 c1 w' B" n" T, H/ L0 s) w return false;( L. Y& S. J- p* g: x0 d5 Z! f
}2 N$ \* i% J8 m6 z7 \
}5 ]) b/ I5 _7 @) Q" k6 s) a
void Checkout::add()
* a( }: a ^% Y( ^2 Z9 j{- o$ l$ N: @0 E3 H3 n" Z
int j=0;! x8 i) y* P$ a. T7 [, O9 {9 Y
for(int i=length-x;i<LENGTH;I++) M e6 c9 ~' p- B L
ax=bx[j++];
9 d4 s! A: d: m( U cout<<"发送的序列加上余数后变成:";- P# `' H" C L
for(i=0;i<LENGTH;I++). g# v, J6 I9 p |: M9 i/ R
cout<<AX[I];* T. F8 |/ N) y- A$ b7 V( M4 u) [
cout<<ENDL;
) H/ G! \9 ] d/ E5 V}, @) w& c4 u7 T9 T1 e
void main()
$ y! ?4 V. [; T( K# `0 G{ ( o0 L+ i) a9 x8 k& Z. E4 Z9 H
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; 5 r' s8 K$ Y5 Y: z( q7 L
cout<<"请输入发送数据比特序列:"<<ENDL;* @! z1 f2 [. y
Checkout test;% e# b, l, d, p' N& G k1 N
test.cxc();
( k/ \/ D2 T, s b" X5 n cout<<"余式比特序列是:";# A0 ~& X, w8 K5 s {- i; y
test.qyu();+ ?6 W! S3 n7 `; L" K5 N
test.add();
- j! V( Z5 |+ w* }$ P$ k7 d cout<<"试试这次是否能被整除."<<ENDL;
. t7 C$ `) ]6 w- }5 l- } cout<<"新余数是:";3 L7 O% N2 B# l4 z
if(test.qyu())3 ]) L( H6 o; H1 Q S) |3 n) _
cout<<"已发送成功!"<<ENDL;
! w" h+ m4 H5 s' h, F else: q+ [! C0 O, I4 `( I
cout<<"未发送,失败!"<<ENDL;6 A2 i3 [ n' z) r( ?
}0 m. e- C" H4 b* l! F# G
[此贴子已经被作者于2005-6-15 20:46:33编辑过]
2 V+ S, D1 u* v |
|