|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
; [& G' Z; r( J5 }5 X. q#include<IOSTREAM.H>
2 c F4 d4 N0 w: }1 t#include<STDLIB.H>
; y& K7 g. M L; P& U; y#include<STRING.H>, Q) z+ E, I2 q
#define CRC 5
, x: B; A$ H. s+ Tchar data[5]={'1','1','0','0','1'};2 F, s( M! ]$ t' I, P& }6 ^
class Checkout
4 ]- ~7 x1 A) g' j& c) ]3 M{
/ G5 i9 O$ z5 U: `private:5 z! [& k/ ^7 Y" a# ?; ]: P
char ax[50];3 }. k. F7 N. m5 e* {, ?! |
char bx[4];7 n( Q( B" W9 d# U7 @% v, r# Q
int x;
% K3 f9 ?0 H. j+ o0 a5 zpublic:
; w- M; b% V a# V( lint length;
& q1 l0 h8 B1 z" k# v8 ?1 sCheckout()& F# t) ~+ Q3 a1 `% O
{ 5 f L2 _8 S; r8 n% x" q
cin>>ax;
: Q7 k* I6 Q+ Q/ L( T length=strlen(ax);3 n' y+ @9 k+ S5 n1 M
}
/ Y1 J$ p T: X. ]# gvoid cxc();
9 Z" Q. v8 v4 ~, n4 Cbool qyu();; A3 c E$ k# I! M8 W5 x6 j- n: A
void add();: M0 l' g& x5 G- \' o
};
0 E/ j$ Y% E( d( j- {void Checkout::cxc()
6 @4 s0 h. Z1 N* n! E3 F, K{! H5 e; k K7 z4 g
for(int i=0;i<4;i++){
) \. n3 S7 Y' U+ W5 ` ax[length+i]='0';
7 X7 }3 ^1 L' _! Q6 ]}9 V4 G% F6 ~3 X6 P1 P1 _7 n9 \
}//将输入序列后加4个0
5 g8 n& c: a8 e; K6 I" tbool Checkout::qyu(): G9 q2 a! s! D9 t- g1 s0 l
{
) r" r, x: |4 M' achar c[5];
7 ]0 W1 t* ^2 }int i,j,n;
# G5 c$ F- C9 y3 e- Xint m=5; d) z! p( r' b ^ D) \
for(i=0;ax=='0';i++);8 M9 \9 ]; U! i! h8 [; F4 @
if(i==length)9 p' k% B& r0 L7 A; K2 t' ^
{cout<<"余式是0"<<ENDL;
* w0 q) D7 {- G+ ?$ `3 } cout<<"发送成功"<<ENDL;
4 k' V- {! i* x6 S$ W, _# G ] exit(0);& I( \- K' h! k. X
}
1 Y1 w& Q2 Y" }2 H9 Z$ `8 Eelse{
8 w- W4 B3 V3 H% d8 N3 _for(i=0;i<5;i++)
& x+ }8 w: N& } c=ax;
3 a' a* H4 y4 U0 m- dwhile(m==CRC)7 E! P; V2 P* Y* i
{ for(j=0;j<CRC;J++)
5 _. h# \ j3 ^: m4 C- n { 8 r% _; f5 N) n2 q5 S* b- [
if(c[j]==data[j])& F+ H( P; K/ ~) Q
c[j]='0';/ R: m) q' r7 t
else) Y3 `; ~ [8 H; B# S; R. J: C
c[j]='1';4 ]1 B9 r& c+ Y
}
] y. h+ ~/ P' U% ?- w0 S% g for(j=0;c[j]=='0';j++);3 q# N% j1 z1 _$ U( S# X. [
n=j;
/ t9 k+ N2 i- v4 } for(m=0;m<CRC-N;M++)
2 {' m; w! l3 W& S {
" E w8 J0 P( a c[m]=c[j];: v2 z5 P6 O: _7 m( p
j++;$ |% K+ Q1 T6 A6 }- P( Y
}
; E0 d+ ~, H/ X K0 p, d0 U3 O while(i<LENGTH&&M<5)
' v0 m7 n( u0 g' ]+ B% k! ` Y {( s# {$ H8 i& U& \
c[m]=ax[i++];
7 p! ~ M+ V" | m++; 6 v3 }' ]5 J( v
}. y, @7 M! a' Q: B3 q0 `6 p1 ^+ d0 C- r
}9 J& _9 U" I6 H
}
# ]$ R }1 f8 W! s5 }int k;
2 F2 K! R' q. h# ^for(k=0;k<M;K++)
% C" G4 D8 |+ m: y8 s bx[k]=c[k];/ I6 B+ u2 Q4 H q! u' R# z+ V9 v
for(j=0;bx[j]=='0';j++);0 i" ]! r6 K) N% v
if(j==m)
/ \, J: P" v4 ^ {cout<<'0'<<ENDL;
( `" F) e X/ X" R2 m& z x=0;2 O2 w: S9 F! a
return true;; ~2 m9 b% t' H% z# H& m- z$ H
}
: g4 G% C5 G. D$ @1 T else. @# I( Q9 r) q
{for(n=j;n<M;N++)
3 [+ @1 R7 J* W* Z* e$ f5 R3 H cout<<BX[N];
. v3 v8 d% G6 C, ^, O x=m-j;
" p) M2 b% Y+ n9 ?& M2 _ cout<<ENDL;* A# O7 z5 a) d3 F, e/ I
return false;8 T( t- Y5 U8 G* `' C
}
9 C1 [6 e. g l* z, f0 A9 q}
* X* V1 _8 ]/ l, ^ c% S1 j! Mvoid Checkout::add()! R ?: J% f3 z
{7 {! e. o* T# G5 n$ i+ c1 \6 T. K
int j=0;8 R3 m/ j& P' T% {
for(int i=length-x;i<LENGTH;I++)
8 K+ ]( W$ y6 n/ C8 A" s: ]- o0 e- B- ?4 O ax=bx[j++];# {9 o) E9 O0 v
cout<<"发送的序列加上余数后变成:";
+ t; }- w% _- P" Y; ffor(i=0;i<LENGTH;I++)1 q q8 D2 j2 S' V
cout<<AX[I];
2 M; t6 r% }8 e cout<<ENDL;( v6 E5 f& G; o& g3 u% N
}
; i H; D( W" B) p* b" w: Hvoid main(). X: v' c, d" G- r! s; n
{
4 f9 v3 e( V+ ~1 o& M8 jcout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; . b! V( M' c! {1 j" @+ T5 w! G
cout<<"请输入发送数据比特序列:"<<ENDL;& q( z0 c4 u3 J' v
Checkout test;0 |/ l2 \% r$ I z% Q+ _" G
test.cxc();
, P! Z6 G/ [# w% Q4 ]2 U cout<<"余式比特序列是:";
6 @: P$ l1 q, p4 _3 p( j test.qyu();
* l1 G, G' u2 J2 h test.add();
, S. \2 S* P4 w8 }; } cout<<"试试这次是否能被整除."<<ENDL;
6 r8 i/ ?/ g" V9 w# i; T cout<<"新余数是:";2 s: P" Y$ `" c O& L; {$ j4 L
if(test.qyu())
: T% _+ K' B: i" s4 r cout<<"已发送成功!"<<ENDL;
/ } `! e8 ?/ M( K! o else
1 G& _6 y1 G* A$ x9 i2 e6 K7 Y cout<<"未发送,失败!"<<ENDL;8 T6 n* j1 d6 E1 ~1 `. C4 k/ Z
}
" m4 M0 P4 m J5 \9 _8 s[此贴子已经被作者于2005-6-15 20:46:33编辑过]
+ g, B8 H* N! X- H- b- K- |9 K |
|