|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
7 ^2 r3 E, |4 n- X9 ?#include<IOSTREAM.H>- B: z4 C* H' d: y: S
#include<STDLIB.H>- O) Z2 R5 q* B9 w
#include<STRING.H>, U0 I) y; T# o
#define CRC 5
$ {4 L/ s* E4 D, Q' C* W( p4 D8 Bchar data[5]={'1','1','0','0','1'};2 u/ i/ G6 l' F% g0 T
class Checkout
1 X8 [2 | T$ K7 F |{" {# `# a6 f: |& j
private:
6 P1 G. u2 i9 [1 Y4 Cchar ax[50];8 f2 h3 [( V: ^( I
char bx[4];! o& ~1 ?; j0 s$ T' R1 E
int x;4 I+ X: n, Q: W; W( P
public:% _0 r& c0 M- r
int length;7 M! @+ L. K! u" K" ~
Checkout()$ L: m6 T% `, |" o, \
{ + a8 b* W5 z, r5 Y/ ~
cin>>ax;
! d6 _4 k- r" M2 g: B length=strlen(ax);0 n1 z3 b7 x* A( Y- p/ m2 ^! G2 }
}% _( H6 @$ w/ @ v: R" G, @
void cxc(); u: e2 p; r- g/ V0 Q9 f
bool qyu();) b: O O- D$ V q$ d# b" h1 C0 P- f
void add();/ j6 k1 j9 A& m
};) n f. J* B6 k3 ?+ |. J
void Checkout::cxc()& E1 f J3 i4 w* W1 w+ U4 E n
{
1 M, `6 _) b. Pfor(int i=0;i<4;i++){5 R2 U7 K- }6 a! h5 }
ax[length+i]='0';6 w; E0 k+ j3 h
}# C9 Y% \, H1 s: p, X
}//将输入序列后加4个00 L3 b9 ^- U4 R8 }6 z
bool Checkout::qyu()
5 J% r- E- H# ~" m{
; S9 z& z u6 }( @. R% c* _char c[5];
& `& H: s+ ?- M2 Kint i,j,n;8 l. m3 N# O1 D; j( K& D6 H: j- v
int m=5;
' h6 ?, |) X- G( B! efor(i=0;ax=='0';i++);" S( i1 f2 h& U: L
if(i==length)
# l* m. C L6 k {cout<<"余式是0"<<ENDL;
$ x2 E6 I4 n- X- | cout<<"发送成功"<<ENDL;
D. y$ L3 m/ G. T% o7 ~9 B# R- c( o exit(0);
) y c2 G& r# a1 V# p) m$ X1 ?3 s }
, t D# ?1 F- T* ]2 R+ yelse{
& y/ t1 U, {+ L* I0 Gfor(i=0;i<5;i++)+ n2 {0 O; i% v9 R. o
c=ax;
& Q8 J7 p# S) R' Q. n [& x( ?while(m==CRC)% v/ b' O2 s, L( K4 \: s
{ for(j=0;j<CRC;J++)
- F, s9 Z' y2 `: ~! S {
; R) W6 ~* `+ w0 h$ _$ b if(c[j]==data[j])
0 N( J9 G# [7 ~, V7 f3 j& t c[j]='0'; m* h$ \, F1 c0 {& q. `2 O
else1 d( X3 D$ k0 F* h/ G, w
c[j]='1';
8 t1 p" l" C) O8 u }/ t- a Q& ]; t. M6 h0 A
for(j=0;c[j]=='0';j++);* n6 I' A& W$ U0 @, s
n=j;$ K/ H, d- y p, x
for(m=0;m<CRC-N;M++)
, T0 F* V6 f. V0 C* G- U {
/ `; x0 A# G3 U c[m]=c[j];( }. g) A+ @( z) {
j++;
6 _# L- v3 l& l1 ^: E0 u }
" S: F- B% v6 j( Z. l$ A3 D while(i<LENGTH&&M<5)
7 W: E# a3 U( t* K {
" ], F% b" J [* H c[m]=ax[i++];
+ {5 m) {. l" a7 h' J" W m++; ! I' {6 j2 {# y! Y
}
5 [ i( J8 }8 d5 v0 ]% `. p}3 F, |8 U) ]; B0 ~; |% }
}
$ x; e# I) O' V5 o; O( yint k;& d' A6 { i' }# j$ F% U
for(k=0;k<M;K++): a3 T- R- y( T1 N, u
bx[k]=c[k];
# z3 R% D. o( B% I7 ]$ h8 ]for(j=0;bx[j]=='0';j++);7 \9 G0 j, X! D9 e4 \
if(j==m)- `" F5 X2 ~) Y) p% t
{cout<<'0'<<ENDL;# X0 h% U$ p- }) o( [
x=0;
1 }; q% Z) D4 w return true;! T; B& I# L- y6 \
}
" l' _8 ]7 ^2 O" O else K% ~- a) z" C/ T' E5 Y3 Z
{for(n=j;n<M;N++)
# a" E; a {& ?0 U2 [1 b; ?+ B cout<<BX[N];
3 S9 H* z- F* |8 u1 L8 j6 s x=m-j;
, R4 K; [+ P, Z% l, |" @7 _# `, j cout<<ENDL;
5 f n) E0 P" p/ G8 d9 p return false;1 {+ n9 e) }; C: A$ {
} u% K0 v1 [( k& [
}
8 r# F3 `) U9 ]- E/ Gvoid Checkout::add()5 G9 \! S! k* X$ `
{
& D8 w z& f7 i" I" a3 ~int j=0;
_8 z1 n- d/ v( s+ O for(int i=length-x;i<LENGTH;I++). y0 H9 D' p( t0 E
ax=bx[j++];
- j% q- v# a" V: L* s( _& I cout<<"发送的序列加上余数后变成:";$ I+ }& Y; |" O! s5 }
for(i=0;i<LENGTH;I++) a6 w9 R, \$ H% s4 {) Y
cout<<AX[I];' n. H+ z8 p% D, e
cout<<ENDL;. D9 c7 P+ O! o1 [
}
, ]$ V, z5 Y7 t! k- Hvoid main()- K% H& ]9 B6 j7 t0 k
{
$ d. F9 z1 V6 ~: g; l6 _cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; 2 q+ V7 {/ R5 U x
cout<<"请输入发送数据比特序列:"<<ENDL;( j. Z- }! V; \/ E3 v* m$ d
Checkout test;
* W# M6 L' }* T' g: e: t vtest.cxc();# ^" e: ~0 {# r2 {# s2 d9 n1 ]3 b
cout<<"余式比特序列是:";
* A( f% X9 s" n7 C test.qyu();2 z1 V- _3 A, ?1 O
test.add();# ?! G8 s, E& Y+ C7 F8 g8 K
cout<<"试试这次是否能被整除."<<ENDL;
+ `$ ?2 p7 d4 m- ? cout<<"新余数是:";
3 p! W% j* f* J! n/ x H if(test.qyu()), |% }, \8 j+ F' G
cout<<"已发送成功!"<<ENDL;
; p" D# I* z& a+ c. r else$ |4 E' K/ a r+ Z$ P; Q
cout<<"未发送,失败!"<<ENDL;
7 ~( e, J% K9 Z: l* j, ?}
" P" F9 y- o$ g9 y[此贴子已经被作者于2005-6-15 20:46:33编辑过] " {) x- _- \* x, |- f- a
|
|