该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊) t2 [" V2 t& Q2 y) q$ V3 d+ p& {' t
#include<IOSTREAM.H>/ l( z4 j% Z- \# u- C( r
#include<STDLIB.H>
2 w6 b/ w* u/ P1 C( |* p#include<STRING.H>0 o4 r& _+ k! v+ A
#define CRC 5
+ o. y6 c) R% z& S8 Zchar data[5]={'1','1','0','0','1'};' c( b9 I& B' b: x& F& O
class Checkout S! A$ v' d" z) Z/ n1 ?9 r5 V# {
{
( x$ z& t. Q) l$ _7 T1 `private:
. D* v! C3 k% ^# z# n1 Vchar ax[50];& A* W1 s: }0 N: z6 b; G+ o$ x
char bx[4];
. ^+ Y; [: l, o% h+ gint x;( J& T7 ]: N/ D A
public:
\- u6 q1 c1 W* g4 oint length;
+ T$ B2 F1 Y/ L6 cCheckout()
5 w' }1 T& a) h3 R5 z{
5 |6 |1 q: m. T8 u, j cin>>ax;4 w( O8 k! g6 Q8 m
length=strlen(ax);
6 @0 T# z/ G8 ^# B. T- n}% o& O( I; T4 A
void cxc();5 p i. G# J# o: B( z
bool qyu();. f s- R( w3 y3 l
void add();6 D) K3 G$ N; D& K7 v3 O
};+ H8 K3 z2 L3 e1 M+ C G
void Checkout::cxc()
. ] ?8 H) m8 q1 S{8 W" G1 z& v: w" K
for(int i=0;i<4;i++){
* F Q3 U/ _5 W$ O+ z ax[length+i]='0';/ ?/ e, W" O' O( V; d# I O
}
1 n8 [" i$ n M! C# j}//将输入序列后加4个0
# C- v2 M6 D: }9 z+ N, qbool Checkout::qyu()1 H' K7 Y6 z9 a& M
{
$ l0 U5 d3 v9 v9 P8 c; ]5 ychar c[5];
7 c& f6 {* s8 j5 D; ~int i,j,n;4 G6 k# |9 [8 u4 M
int m=5;+ M7 O+ B! `$ M( [- P" ?' L
for(i=0;ax=='0';i++);
s8 K: r, t& r if(i==length)
$ \6 W; @2 g7 P! { {cout<<"余式是0"<<ENDL;! |$ _+ O+ X- k. h# Q% s
cout<<"发送成功"<<ENDL;
* U1 d& K% g3 O$ V3 @ exit(0);1 Z: U ^: w& t- Q* f1 H
}
1 r2 w$ D- p1 S* q" \1 P4 Jelse{
K9 O+ k8 B0 {- hfor(i=0;i<5;i++)
. z- \: [0 x: Y. Z; _% w3 L8 N c=ax;7 I9 D: W( R4 M" {& U
while(m==CRC)
* h+ v, o+ }* c1 n! O{ for(j=0;j<CRC;J++)
, Z! \- M; W( e" T { + Y% d! b; \$ _$ Y4 m9 G
if(c[j]==data[j]); k L; Z' w. m* X* Z
c[j]='0';
5 r# @0 R' N6 l$ s1 C( u1 |7 O else
/ \* u* _# O7 p8 M0 z3 H Z c[j]='1';
2 A# h/ P( t3 b/ a; ~+ M }
- I# R4 U9 i; I' i for(j=0;c[j]=='0';j++);' ~$ p- I6 k* }- d+ \
n=j;+ p( P, x6 s9 \5 |7 t6 X
for(m=0;m<CRC-N;M++)
+ A& W6 W7 A& a3 \! s" t6 X {- C8 L% r7 V2 u) x( `
c[m]=c[j];4 f1 ~, o; s7 _# B3 z
j++;
4 {4 i; l* n" u4 F/ w }
( ]' m9 u: P8 H) V. ?: ` while(i<LENGTH&&M<5)9 [ }0 n/ C! p
{
. B, V$ d4 C9 `1 x c[m]=ax[i++]; / _/ L# \7 N" H
m++; . s0 r9 n8 N+ g* A4 D+ p- H$ D
}
+ C7 d' Y D# q9 Z' S; h: t6 M0 T}* S) {) K# t& ^% x' F
}) w: B3 W8 [1 s1 O( }. `. o/ c
int k;9 p1 A; D4 N) ~; q4 r3 U
for(k=0;k<M;K++)
9 O" v7 h. b( R5 W0 p bx[k]=c[k];
+ \' j( ~( e7 W% Z3 r; Xfor(j=0;bx[j]=='0';j++);
* f4 C" @) b) z8 F if(j==m)
8 F) Q+ [) e6 b {cout<<'0'<<ENDL;
" h; N; J" S& }9 ^" q: b6 o x=0;# I4 `: q8 c+ g" A$ D
return true;
7 j# k1 f# I, i; p }8 D/ {: Q' J. ~! E' S
else1 b* Y5 O" s1 b( Q" a
{for(n=j;n<M;N++)
8 r @- O; x& D. v cout<<BX[N];) e. u D7 h1 V
x=m-j;( W3 x) F& ?* |% b5 o0 }
cout<<ENDL;$ O/ d- |$ o$ w7 |( Q; \: x
return false;! R, t: f/ b' L: T
}
; b. B- c+ W k7 b7 D* T}
& ?5 \9 y# g# o9 H% r1 @! ]( v0 kvoid Checkout::add()% Q- H& D& ~- h- w7 B( C
{
9 S' u7 E/ v4 y# W D% T+ x0 ^2 C9 d" O$ A6 Fint j=0;
6 j6 F( A7 m5 o: {) k for(int i=length-x;i<LENGTH;I++)
' z$ i2 e; ?) u! W% W. [ ax=bx[j++];, H2 u7 v g1 k! O2 c* y8 K! j
cout<<"发送的序列加上余数后变成:";
, H! B( w! L2 [; l8 {/ p, F) Bfor(i=0;i<LENGTH;I++)7 T, r' `) t4 v0 H" [6 ~
cout<<AX[I];/ c% ^# ]6 m1 u# i
cout<<ENDL;; J+ R ~! C; L% K
}
; v0 V4 ^3 u! a0 z- Uvoid main()8 O! y. v! ^3 m* \, A* X- C% ^
{ 4 f+ ^. S5 z, G$ h
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
' u, c7 j [% c# [( y2 W cout<<"请输入发送数据比特序列:"<<ENDL;9 |; L, {) O0 s8 [ _; M7 N) u
Checkout test;
/ [. c6 j+ o" M* w' D3 c7 E' J: ?test.cxc();# W& ~$ ]- v2 M! c2 \" N4 T0 @0 x
cout<<"余式比特序列是:";
) d: j3 t& S* s$ d! n test.qyu();$ x% }' E+ P3 G& M( k7 G- t! m
test.add();' S$ p8 } ^/ F. G! f1 {2 ~6 |2 s3 z
cout<<"试试这次是否能被整除."<<ENDL;
% i: G4 Y0 r C# b- S# J cout<<"新余数是:";
1 U. z5 n0 `9 m if(test.qyu()), x3 { X' d1 R6 k. H& \6 u9 E( I
cout<<"已发送成功!"<<ENDL;
- C4 j4 z: I; Y x$ } else
" ?0 z+ M9 w7 D2 [7 _" j cout<<"未发送,失败!"<<ENDL;' @1 D! h1 B9 ^+ E3 c* U+ J6 f8 _
}
& R/ g; ~+ i- Y0 }# u$ r[此贴子已经被作者于2005-6-15 20:46:33编辑过]
% T- Z$ E5 K, t- E |
|