|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊* e1 i7 N/ f+ n
#include<IOSTREAM.H>0 G- D) g! p- k: p) D% [! M$ d h
#include<STDLIB.H>
" V. a" I1 r7 b# k ?5 [# G" ]#include<STRING.H>5 H+ |. n# S( z6 E! z
#define CRC 5 \; S7 V0 P. f. p5 O# S" a
char data[5]={'1','1','0','0','1'};
. ~$ S* x7 \8 U4 f7 v! _class Checkout; r$ ^9 a/ m D% \, n' X
{" r5 _& g5 G* ?- c# j" J
private:# ^; p# X c# B# B9 I& G
char ax[50];* _' U9 ?2 x; x: F
char bx[4];. w a% {) o. k# r& M
int x;
' t2 w! y0 O; R/ S+ b! W: ppublic:
3 I F9 S/ }/ g/ W( z7 jint length;
% f2 I8 X* G$ E# P, |$ sCheckout()! t1 l, m& y0 e! q3 F- B
{
, q0 h% K. P+ t( B, q cin>>ax;
4 D' x. R9 S* W) U% ` length=strlen(ax);
/ ?0 N5 ]. J: B4 w: t) w3 h}; i: W3 ^5 Z/ d- H8 d' `8 P
void cxc();
# r+ P: O% T! J: Obool qyu();( n9 a( W/ j, o; @* b
void add();7 x' d- ?: T4 {
};
* c7 I, ]( f7 T, Rvoid Checkout::cxc()
1 Q0 B: f. Q* V9 ]* G6 v{) ? o3 ?" @* L% I
for(int i=0;i<4;i++){
( q+ X8 o! R! I ax[length+i]='0';
2 ]& C, u) ?1 ]7 }* O}
4 r5 r- O" S" G4 f}//将输入序列后加4个00 Q7 Y6 O/ J- {- n+ b" h; x
bool Checkout::qyu()
/ O0 A) c, n p/ l, G( H0 t7 x{
. D+ \3 y# b" {1 schar c[5];: T3 y0 |0 Q# C, k G6 }
int i,j,n;7 j5 z* x$ j% U K
int m=5;
" w4 j. y: s: Afor(i=0;ax=='0';i++);
( J' J8 [8 i4 G1 ~* n if(i==length)
) q- G6 K4 b0 t: @+ e7 h! j1 A {cout<<"余式是0"<<ENDL;( p5 U# m2 }7 s4 k
cout<<"发送成功"<<ENDL;0 E. n+ }0 Z; w9 H( R
exit(0);
( \ N5 u) w( v5 D6 b& u }7 j2 U. {" a2 V
else{
7 U5 t/ e" N0 L+ M1 P5 _for(i=0;i<5;i++)
9 \2 g* R! }/ D* z c=ax;5 x6 q8 @8 A U R) M' `% W$ H4 n% g$ R
while(m==CRC)
9 k2 G: w) J2 Z{ for(j=0;j<CRC;J++)
" A2 R( L. V3 j6 q2 ~2 ~- b1 G; u7 t {
* [; s% ?0 e5 a# b, u if(c[j]==data[j])( E0 ^1 g: V( B7 T
c[j]='0';
! M; [, N/ i$ z: Q( B else5 W' Y( W4 {, q7 g' s; c- [% o8 f3 S2 D
c[j]='1';' {8 j1 o' a5 B) Q# y, K
}4 Y9 k9 x; B, |$ D, P5 @9 ?
for(j=0;c[j]=='0';j++);
9 i- s) Q+ @8 j3 i2 T6 ` n=j;
0 @) `3 k6 S1 }) z/ F* x5 e3 i# M/ ` for(m=0;m<CRC-N;M++)) W5 @- ?; h0 T
{
# J, u5 j m, C& y8 n Q c[m]=c[j];) q% d R9 k' W9 j6 h' q
j++;
7 F; C4 b" W, j8 R, c4 q/ D! s }+ O0 o; Q5 E* f6 q* _
while(i<LENGTH&&M<5). U% h w# a9 |1 Y, [6 {
{
; Z$ n( z! Q) r Z4 G5 G c[m]=ax[i++];
0 s* B( f) E1 W5 Y; X$ V; u5 |8 j m++;
) c$ _2 E p5 b' _; k# V P }9 z/ l& B. r% A. d+ ^8 I; |
}' o2 o7 d( t0 @& z( F0 @
}
( q# [) i5 D; C3 Z6 ^$ @* B: vint k;
& _+ b9 ^4 j( j( Rfor(k=0;k<M;K++)
8 F" C' ^6 G% v4 d \" o) Y- ` bx[k]=c[k];0 W2 x8 c, F; X U
for(j=0;bx[j]=='0';j++);" u( ]+ g/ G( n
if(j==m)* a+ j: h3 B8 P N% v
{cout<<'0'<<ENDL;2 K! Y$ O) [+ Y' H4 H
x=0;
( }! b) m) }% r* f$ H& m7 m return true;; F/ K4 s! `3 j1 `
}) n% [) J+ f( S5 ^; J
else$ Y0 @6 O6 L+ m+ R. n# S( \0 m0 \
{for(n=j;n<M;N++)1 `" `& d5 |2 {
cout<<BX[N];+ u! m. z4 l2 o/ p" T% p, G% ^2 A7 v
x=m-j;
) v. |1 l$ ]3 o3 b2 k& W' C8 E cout<<ENDL;
1 y( t h4 [. H" [% S* j return false;6 e7 E* j! L' w; z1 f6 x
}; e! E8 @7 ?. u/ A g$ Q
} _. l" y l. i" }
void Checkout::add()
8 w* h5 C$ R) L{: I/ _+ a& b- Y* R5 z
int j=0;4 O7 `5 j/ g# f' g+ f- q
for(int i=length-x;i<LENGTH;I++)
# I- g2 Q) w" H! e9 r: o/ r$ r ax=bx[j++];
) q8 Z4 T- k3 l; ?3 M( w0 @ cout<<"发送的序列加上余数后变成:";, W% H5 _2 i: l
for(i=0;i<LENGTH;I++)3 j7 R A$ P9 ~9 S9 f5 m
cout<<AX[I];
. J$ c! B, O# m5 z* L/ |% I6 k cout<<ENDL;2 j7 Y, R3 {2 J
}" X0 }+ d' t. R5 n
void main()
5 G5 d& K! V- Z* E{
! b) z+ o9 c# g; fcout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
# C6 }- m6 J( y. b* U! u cout<<"请输入发送数据比特序列:"<<ENDL;) W/ k5 K* q) `. R9 \
Checkout test;
8 ?2 C9 W1 K7 ~. w wtest.cxc();
# N2 ]/ s& s% `7 a+ _- z, |5 c cout<<"余式比特序列是:";; m! T1 h6 i* `
test.qyu();
: }8 ~* }; z1 E4 T3 P* |- E test.add();& _7 s' f1 B( N6 {) f) T3 r: y0 H& Z
cout<<"试试这次是否能被整除."<<ENDL;9 |* s6 |8 H% B- G# k
cout<<"新余数是:";+ `8 K+ S( T# Z& n S: C
if(test.qyu())' W) K; L# B4 b9 l
cout<<"已发送成功!"<<ENDL;+ b6 E$ p5 |( J- g
else& X& ~8 Y6 E5 F
cout<<"未发送,失败!"<<ENDL;
7 l1 d {! j. w( {' |9 |}; ~3 a+ L9 ]5 M, y w* u3 ~
[此贴子已经被作者于2005-6-15 20:46:33编辑过] $ I3 y' |3 a, X/ k
|
|