该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊8 @9 s6 K% k+ f3 o4 m
#include<IOSTREAM.H>
- r) f, E, T& f; x3 V* Z# N- `+ ?#include<STDLIB.H>
5 }* M9 H! L5 D+ q4 ^1 o8 y9 U#include<STRING.H>) O, Z7 f. `8 S- a$ e) c5 V0 E
#define CRC 5
) T) @" K' F5 o4 u0 U+ B5 _char data[5]={'1','1','0','0','1'};9 E( U% Y1 @; w/ F1 O
class Checkout
: M% l# I5 ?/ h( O6 W{4 C# ?3 O3 y5 V3 a
private:' Y7 r% A9 ?+ H# q% e7 m) D2 U: ]7 W7 L
char ax[50];
. L# {: J7 U3 z! n; b$ Cchar bx[4];8 B/ a& a4 }0 o% j2 h4 p
int x;
# c( Y/ j m1 @8 D4 dpublic:
! I" \8 T# k9 B; p0 bint length;
8 h) S! Q* K1 c" a& n. zCheckout()" ]+ S/ J) ?6 s& s3 _% t
{ 9 c" n9 m1 a/ k" a! ]
cin>>ax;
. r* M j7 w' q8 O- K3 _! b length=strlen(ax);
! b7 a, j9 D0 X0 R0 v}
# I! W) n. s% U2 `$ A. bvoid cxc();
. D b/ {2 X' y, ^8 rbool qyu();
' K$ ^5 y- C/ x0 t- y# i3 `. |void add();2 u- Q3 m6 o3 m
};1 d" D* S1 v; q
void Checkout::cxc()9 q8 d2 V6 L: l( L
{: X1 @, `0 p. N! z1 |3 D q
for(int i=0;i<4;i++){% C: D3 l' d+ O9 M8 l* n
ax[length+i]='0';, F8 @! Y0 t8 { q4 F+ h
}
, z- K/ _$ [, }. v}//将输入序列后加4个0
K3 N6 R: \8 K+ |" _bool Checkout::qyu()( r$ E1 v; E( @- D
{3 ?: S, F0 c+ V2 e- A; G
char c[5];, m3 ~ G" N$ t& J$ ]
int i,j,n;
( |+ x( H7 \9 F8 ~int m=5;: W$ w. I: @9 x9 S3 I
for(i=0;ax=='0';i++);; X/ [+ {/ v& e6 e+ S& M( ?- w, q
if(i==length)
* W* _1 @+ q$ q2 D, u {cout<<"余式是0"<<ENDL;
1 F( K) \" [/ r1 i8 z2 \1 I cout<<"发送成功"<<ENDL;
7 g" O: p" s& e: J u exit(0);0 [, F- K2 E) A% ~8 n
} u1 P( e4 M) `
else{2 G$ q: u3 Q* d: e' y4 h' q. P
for(i=0;i<5;i++)
! m" L2 p [0 q; Q2 r# D! | c=ax;
5 N3 F" ]" i+ Z" q+ ?0 J# T" l# F% twhile(m==CRC); q" {( t3 ?2 ~; O
{ for(j=0;j<CRC;J++)
5 h' F9 M% c8 X( m. O a' E { ! v3 v- A3 W$ p1 Q
if(c[j]==data[j])
) H+ L7 @" b( s$ k0 i/ g8 p: T$ } c[j]='0';
7 n: @1 g7 M9 b- n- l& Z# j, G else# N" V, D; z+ n; \
c[j]='1';. d# b7 i# s# p. g E/ j. c
}
# `7 w8 A+ k" }. T9 Q" V for(j=0;c[j]=='0';j++);& p& x# d# d/ K/ I9 _
n=j;( f5 c: {. c3 Z# l% g% ]0 u
for(m=0;m<CRC-N;M++)% ^0 w" Q5 g( ~: a; K
{
( \1 g: o9 O* m; K9 [ c[m]=c[j];
^7 E2 ?& h* F, c! r$ } j++;
+ A3 y; o) d2 m+ D+ v }
) _: v7 I% W" d) o5 f( w& y, X while(i<LENGTH&&M<5)
) i/ U x }* A# H# ^' s# \) C {! z, I4 X9 ~! S
c[m]=ax[i++];
, M% D$ Z& v' K; M/ }/ B- L m++; : \# A' h( I1 w7 K3 ]% c; U6 m
}% @3 b1 t+ b: G7 M9 q7 l/ n
}
9 [7 F0 c/ X6 D% r3 A: j! _0 T$ x}; y8 Z: \2 ], o0 M5 }
int k;
: ^& |0 q5 j' rfor(k=0;k<M;K++)7 P9 L* X' a0 k2 l: Y6 _
bx[k]=c[k];6 n% m/ I! R( {1 z% v" E
for(j=0;bx[j]=='0';j++);3 ~( y, u1 K. a f9 t% F5 ^
if(j==m)
6 e2 s" i8 }4 Z4 l {cout<<'0'<<ENDL; i& x' i- f6 N! O, \6 p3 f
x=0;
; ~' r, k9 } b1 }# S5 N% H return true;
. ]4 C2 E) {/ T. w$ f: v }, }( v, }* [0 E/ h T& a0 p$ m
else
3 d: x7 A" ]; @) T {for(n=j;n<M;N++)0 k x5 N' t7 s. x2 | f
cout<<BX[N];
; j( Z$ d. ~2 I# @, A x=m-j;
9 m } Z! T* _" Y0 P cout<<ENDL;, f2 c$ k, x- A" i$ ^) E
return false;* ~: D1 R) }1 {9 O+ U+ M. ]
}
* I9 h- u$ }( B0 L: U& X) }. \}* _9 ~& n! \, v$ L& @( d5 L' o
void Checkout::add()
p, |' i- ^* P- i) C{
( d; C& |) z- ^- x2 jint j=0;- C1 P2 u* H# {4 H; p! W, X
for(int i=length-x;i<LENGTH;I++)
w8 O( F% ?% X! y+ {1 d% l5 E ax=bx[j++];& F- ^0 X' U1 ?7 V; f6 a' B
cout<<"发送的序列加上余数后变成:";: o4 J' ~7 j% |; c
for(i=0;i<LENGTH;I++)
5 r7 e% v# `9 u. n8 R& }! J cout<<AX[I];
$ h% i0 b, k; f cout<<ENDL; D5 ?' @4 g- C- V4 s; \
}' j. `9 M- W8 r( y
void main()
# {/ s, |) w) p# q% F{ 4 K- e' I0 s$ c% D
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
$ L/ a7 {# p; y+ A( s& i4 |8 g cout<<"请输入发送数据比特序列:"<<ENDL;
* Z8 c/ l; t F4 v" A8 I! A' ? Checkout test; B! R, V0 j- Q, ^
test.cxc();
6 \2 t( W' C9 x+ E5 S cout<<"余式比特序列是:";
' ~5 J8 j! l1 k: _6 J( ? test.qyu();
& z" ?# F5 g" [, P/ @ test.add();
- i$ A0 w- i( N- D/ J9 a cout<<"试试这次是否能被整除."<<ENDL;
) m/ X9 f5 a' [8 b, _- a+ a+ D cout<<"新余数是:";9 _8 P/ T# ~9 [
if(test.qyu())# S' s9 c+ Z7 X3 k, y8 C
cout<<"已发送成功!"<<ENDL;8 n) W- O5 l! S5 ]' N) h
else( |6 P7 E. L2 h. a1 c
cout<<"未发送,失败!"<<ENDL;
5 Y- G) @; ~3 n2 a) I# x}# B7 k/ M: P0 r i& u5 @
[此贴子已经被作者于2005-6-15 20:46:33编辑过]
# @/ ~4 Q ]3 |1 Q9 F! l( i' E |
|