该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊6 P! X! C) s8 T8 @: g0 q
#include<IOSTREAM.H>; l3 [) j7 G8 j4 p8 d
#include<STDLIB.H>
: l, g2 J) L" [7 `#include<STRING.H>
, _* b" t; C% f: p! }/ Q1 y$ O% w#define CRC 54 l; q W& l# A% G1 T' r
char data[5]={'1','1','0','0','1'};9 Q2 n" S- M+ A6 M6 z/ B# v1 s
class Checkout% ], D0 H) `/ v V9 E3 I* i
{- [2 |. n# B2 o: {3 u
private:
$ V! c* v p* ], R9 ]char ax[50];
! W4 V9 T3 [* x( }char bx[4];
; A4 ~- A0 W9 v8 t h. ~int x;
) R3 @$ w% ~- Z, g7 e% Upublic:
3 B) H; D% ~# p" r' ~, \int length;
7 k% P$ `1 Y+ S% |+ |Checkout()
1 T5 }, X% n- z8 Z1 U, L0 J{ , u. |$ F1 c5 n
cin>>ax;6 U, p( c2 Z( L
length=strlen(ax);
5 p) @. m: [# W7 D' I( J}
& c: L8 u1 Y& _# avoid cxc();' a4 ]+ c0 J: w& G
bool qyu();# Q# O1 s/ N# A |- e( h) r) q
void add();
8 X/ X' P7 |& `; t# Q" T( d/ ?};
( f. H9 B1 m! W' \void Checkout::cxc()
4 w7 |1 s; T# ~5 u& H4 }{% R5 u) I9 w2 f# |! n5 N
for(int i=0;i<4;i++){
. U2 e5 j+ \4 J- z1 S: _) A; T ax[length+i]='0';. v) q$ h( W: y' w$ n& e
}
. Z6 S- l) Y! Y# j) X6 \}//将输入序列后加4个0
- R b+ }4 d/ ?$ Ubool Checkout::qyu()
" A6 ?( W0 e* h) K! @{$ f6 f! D$ s8 K0 s; ]
char c[5];6 ^, _( o8 N; u% H1 P
int i,j,n;
1 S e: U! G5 e( i4 V6 {int m=5;8 @) v w5 a8 A1 Q4 _+ r/ F
for(i=0;ax=='0';i++);7 Z& s: O/ L( O' e1 ?9 c
if(i==length)3 {+ h5 {- J8 j! B& c
{cout<<"余式是0"<<ENDL;: Z$ _: t( d. d
cout<<"发送成功"<<ENDL;
) M: J. v; z; m3 L' _) ]9 r+ z4 ] exit(0);
' [1 R4 O+ B8 O8 {4 C ? }
a* R0 t* g% i8 o4 s" s1 H- lelse{5 }5 N% H) j. x R9 m# {! u
for(i=0;i<5;i++)+ ^# c- l% N( n2 G! v
c=ax;, S$ Y/ n- _" [7 L8 f0 ?
while(m==CRC)
. g$ Q6 O5 x5 R8 g+ g; J{ for(j=0;j<CRC;J++)! O; c& C& N9 f/ D% ?* x5 \
{ 2 L; m) Q; [, a% B( b
if(c[j]==data[j])
! ?) M) j" J- i, d( ~5 L6 O- H; G7 g c[j]='0';
/ b: r- R) A; M- u7 j else
6 S- N8 Y/ f J; ?1 ]2 Z* b c[j]='1';% u( J# D {6 n
}' N( s K( B2 O" V8 U/ m e
for(j=0;c[j]=='0';j++);
8 O7 F2 P0 l, ~5 X" U, N: p% f n=j;7 g* Y' b. u$ r; e& F# }
for(m=0;m<CRC-N;M++)' J% B- K- I9 D# U
{
! U2 g( i# L' C: c- U. g3 f: K c[m]=c[j];
9 \% s" g! w( L4 e j++;( T% P" x. q, [; @4 ?. \
}# l, Z2 g8 r. m7 v5 [/ _% C/ l
while(i<LENGTH&&M<5)
$ d; e' p9 ~( |$ X/ I& L {5 O0 p! x s, G5 H4 k1 p5 ^
c[m]=ax[i++]; x8 }0 p0 I) U/ ~; u; M
m++; , ^% K5 b/ P0 i/ r5 t8 ~
}
1 \: L' h7 @/ }, I9 u& g}
6 y1 E& ^1 {" a2 d% z8 w}: l! E4 U. o( j3 S2 Z* _
int k;0 e z {' U2 b K8 R9 ?( h
for(k=0;k<M;K++)6 h9 J7 m4 w; a$ F
bx[k]=c[k];
; W- a1 X5 F8 I" V; O% wfor(j=0;bx[j]=='0';j++);
( P! R7 n* ^* h( J" s$ p1 \ if(j==m)2 z j! s; [8 h
{cout<<'0'<<ENDL;1 G$ S; s% i, c/ \* Z# U. A
x=0;
5 |) Q" o! L% h- P8 I8 u( v* ]# g return true;- W* `. `8 I( ?$ h4 f; J- y" F
}
( R. b5 z. k1 }0 L0 Y else
9 G& V8 z6 _' G7 ]% p/ A8 |* ~7 f1 ? {for(n=j;n<M;N++)1 d$ O9 ~' {$ ~
cout<<BX[N];
; a( r# f, t% h R% q x=m-j;
8 {' O. P) `5 z2 j2 e) K3 T cout<<ENDL;9 H- @8 n: Y- r9 ]$ i' b0 e j
return false;
$ m9 W6 F; `# R4 Y7 L7 m! c }, F: Z/ T( I! C. ^) y8 V: [. `
}
/ Y! `( c# q$ }& s" W2 {" nvoid Checkout::add()
: ? j; ~ U7 i# p: {{5 E7 f, j, d x) @; `9 ~
int j=0;
. _( z7 x! g4 A7 k# n for(int i=length-x;i<LENGTH;I++)
/ a* q4 J+ G0 `' z6 { ax=bx[j++];
4 C( F# j( d2 ]0 } cout<<"发送的序列加上余数后变成:";0 l; B& h) I- ]6 h2 X
for(i=0;i<LENGTH;I++)7 b& ^+ y8 j( e4 K( m7 ^
cout<<AX[I];$ ?9 e, Y0 s% G5 n& i) v8 V, V3 L& n! p
cout<<ENDL;. z7 L- f; |! l, u
}" S: A& J/ L0 V8 E- `% c3 p, ]) z
void main()$ \8 L% u4 ^5 ?9 G* i9 [ D$ u
{
k x5 {8 c; a! Y6 Y/ K6 Y( mcout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; I" H) G" G+ T/ o7 E3 S
cout<<"请输入发送数据比特序列:"<<ENDL;8 F3 L, q; |# b+ ]# [
Checkout test;
% P% J3 F0 q. u% U- Ytest.cxc();$ G. o5 [1 x+ w
cout<<"余式比特序列是:";
( P1 @9 ^ E; K# u test.qyu();
7 _" ]$ ~% T# f" G7 ?8 A test.add();
! P- W4 i/ P& E# \2 m/ ^ cout<<"试试这次是否能被整除."<<ENDL;1 S7 w) _ f& q9 M% G6 U* a
cout<<"新余数是:";# L- B; I/ t5 Y( ], Y; y
if(test.qyu())
( S; q* P/ I1 W cout<<"已发送成功!"<<ENDL;
, H- }) o# p' X9 g" d' m& Q; Z else! T/ N: P9 O- V7 ?7 k$ h" s
cout<<"未发送,失败!"<<ENDL;
4 ^& P/ ?9 \6 u ^5 Z# a2 J}: E1 X( c2 C, C& W# N3 o& `
[此贴子已经被作者于2005-6-15 20:46:33编辑过] ! o. {$ h* P8 g3 Y' P2 K
|
|