|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊9 ^$ t0 C$ U) X) w9 X
#include<IOSTREAM.H>; Q* }0 J3 u/ a% F' L
#include<STDLIB.H>
& ~5 x' r# [5 C1 P9 X, h#include<STRING.H>
9 }' ~* W p* I#define CRC 5, U5 a6 S+ }+ R0 [- }/ k$ m
char data[5]={'1','1','0','0','1'};
# }3 J9 m) v; wclass Checkout
( a( |' }" Y9 X _( T{- g+ V0 Y: [( J" q8 ~# B8 g
private:( q' _& @* w- L$ |
char ax[50];
6 \# r- E6 Z' H7 g. P# h7 }char bx[4];7 C3 d, s, K7 a5 i% X+ S
int x;
4 ?, M- N1 ^# A; ~6 ~public:, C6 q. }* N3 _! O1 P8 V2 @
int length;4 N. y1 s' W" i7 A# D! X
Checkout()6 F% {/ J- {4 x5 e! P
{ * I$ O9 _! _- }2 `5 s7 z
cin>>ax;" T$ B) e( R8 ], |. ]) Z# c7 j4 Q/ }
length=strlen(ax);9 i) r F r4 h1 U: g
}2 j2 ~* [, v# R
void cxc();1 ~& x1 c" k0 x ~3 J
bool qyu();4 p) z% C2 j) t8 V3 J1 G, w
void add();
6 ]. Q8 ?# `* L9 S};+ V5 q2 v! G7 r1 E- a
void Checkout::cxc()* W4 ^7 [; @. p! L$ U# S: [
{
" \& Y, M% f+ q( G$ R: Q9 q: Mfor(int i=0;i<4;i++){" R. F x- R# ~+ W4 c' P
ax[length+i]='0';
' I, \! ?" b* b& x: L { b}
7 G. Z# O1 A# d K( r}//将输入序列后加4个0& h' k3 P/ }8 A9 t k2 E/ |' C4 Q
bool Checkout::qyu()5 V1 A" P( [+ f" G9 e% S z( v
{
: x/ B1 l& B+ R+ [" S1 H( ?/ R1 n% N" rchar c[5];
! i6 f9 \) X1 F! K# n5 z( g3 _* g) Yint i,j,n;. W1 f3 z$ V1 M. E. h
int m=5;
3 E7 d7 J# X0 N5 [3 S' sfor(i=0;ax=='0';i++);
$ e9 j |! @5 C; G: ` if(i==length)2 m% U( R$ ^" r5 \9 K4 g5 @
{cout<<"余式是0"<<ENDL;
6 z P" L" d0 z) z8 c cout<<"发送成功"<<ENDL;9 q, L; M4 |( B" d
exit(0);# G9 L" y& y- B3 e
}8 v+ m G$ R* p+ [9 s- L" d" A
else{, o% o" ]9 m% J z
for(i=0;i<5;i++)
& m! s! p1 P2 U c=ax;% G6 L1 }3 V6 u! {$ S8 n
while(m==CRC)
6 V( G7 k' [) [9 r# t{ for(j=0;j<CRC;J++)
+ k+ A$ G2 D- C' l {
9 H. N B9 L- E2 C: n& a if(c[j]==data[j])4 n# s* C0 o! `; Z
c[j]='0';
6 J: f" f* C; M1 c else; n2 z( M. g9 X- I" q
c[j]='1';
X% |' ]2 L3 g. v+ E }+ F. m( L4 e% t
for(j=0;c[j]=='0';j++);5 l8 n& [4 H' M( `0 Y1 W
n=j;8 j% n0 k Q( B: P" o- s
for(m=0;m<CRC-N;M++)
, f; ~) U# d1 t% W" Y. r {
) B; {/ q+ D- o( ^' f c[m]=c[j];
2 k" E1 O; {& ? j++;
) n2 C& |: t8 V- V- k a& B0 ^+ T }
3 F9 \& r% {" e while(i<LENGTH&&M<5)% {7 e4 \0 Z, G
{
+ H2 o D) y- p0 p1 \ c[m]=ax[i++]; 2 b; x. i6 d6 g0 H
m++;
( O0 m; \5 w' O9 ?2 D" n u }
I! f0 h6 G! \! X$ {( J* \4 J}
# A( i s6 Y4 a# ]}
5 Y6 ? K% f+ u6 E' G2 n- yint k;2 e: Y$ l: s9 [9 v! ?: C/ V" U
for(k=0;k<M;K++)" z* T5 m6 @3 U# T" _
bx[k]=c[k];
9 h+ u9 |5 e. `- cfor(j=0;bx[j]=='0';j++);
$ P$ {5 S6 G2 v; r6 N6 q if(j==m)
/ B6 S, ~ Z% V {cout<<'0'<<ENDL;
2 B4 {) }5 n- E: _ a( p( { x=0;# B- j) R- Q+ }5 y2 z7 J
return true;
5 Y* ]* w+ P1 z: N }
3 e) c1 ]+ Z! ^9 e% E& K else
0 L3 W+ _( H9 t% ? N; O& o3 ?0 G {for(n=j;n<M;N++)) ]# ~2 S' @6 `2 Z% }* v/ S! W
cout<<BX[N];
4 p7 x6 S7 e1 c& {; p* \- D x=m-j;! C0 N e. u% L% W( i7 S: s4 s
cout<<ENDL;
$ r6 r1 ]% O% c' @ return false;5 b0 @$ S6 \$ C# d. R
}
0 S8 j* l' L7 [; \" h, c3 o! d4 L8 Z}$ t: j& k& n5 h, i& l
void Checkout::add()
% `) H# d p7 `( e1 z: h; y{
/ U+ t- N4 r! L/ W( B1 q+ N7 j! kint j=0;
1 ~2 Y/ W, X! C, a- U for(int i=length-x;i<LENGTH;I++)+ ^; l' B; m( @; @5 m
ax=bx[j++];5 M+ R+ N5 G: v1 S/ b
cout<<"发送的序列加上余数后变成:";5 P( I! r, ]6 a! k& f
for(i=0;i<LENGTH;I++)
6 N, E/ `2 A8 M* E6 t cout<<AX[I];8 R" @/ }9 x2 c) w
cout<<ENDL;+ ^ o2 s* u- T9 v
}3 _1 ~+ P7 O1 H; F$ `/ i# ~* Y
void main()
9 c i0 Z, C/ l0 \0 e A{ - M/ {; l7 p# q9 A( S& V+ B3 s+ J( z
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
5 U: Z" D& R- g0 `: A/ d' u4 o cout<<"请输入发送数据比特序列:"<<ENDL;5 P. a$ @+ t$ R: u! @# }
Checkout test;
3 K/ C) x2 j dtest.cxc();( p8 J4 l' z- o/ r. s( m5 H
cout<<"余式比特序列是:";
+ D3 D1 A7 W: H. I) {% Z3 N2 L test.qyu();
+ `! q" t+ g/ Z1 ?7 Q: e test.add();
) ~1 m% a! q8 Y. x cout<<"试试这次是否能被整除."<<ENDL; b. x( W" Y1 `" M: L" ?
cout<<"新余数是:";
% Q+ x" e$ V8 G0 S if(test.qyu())
6 K$ {+ V0 d; B& K- `' G: C cout<<"已发送成功!"<<ENDL;9 Y' A6 _2 V" M v- C" q
else/ ^; r3 C! ^9 r* d1 a- g& u, \& c; _
cout<<"未发送,失败!"<<ENDL; |: f/ Q7 Z/ p0 B0 Y) V
}
: l2 T- L% u* i% E7 N/ C( W8 M- P[此贴子已经被作者于2005-6-15 20:46:33编辑过]
6 D6 c! I& V. y) u7 K1 H |
|