|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
. ]- l0 u" m& v8 v/ s0 g#include<IOSTREAM.H>5 l: N/ ?- I+ Y
#include<STDLIB.H>
+ p. Q' `$ A) h: l: b! Y#include<STRING.H>7 X+ [* {5 R8 P( d; \- }; |; g
#define CRC 5
2 N/ l- L* Z+ U! R2 S7 A k. {char data[5]={'1','1','0','0','1'};
! |4 K4 ?; G, W% P$ r) g* zclass Checkout( l4 y( Q+ o1 O: o# K% Z
{! R9 Y q6 n6 [/ \4 y" w# K" N
private:1 ]* {0 k v# N: [3 l- }& {" |4 f
char ax[50];
( v3 F" F9 B0 O9 X' S1 rchar bx[4];8 I; O7 w1 I J) q5 ^
int x;
/ p: d- V$ w0 Y6 t" Y( Mpublic:
* {: t) a9 b- a% R5 Dint length;
3 u1 U B! x4 O, i' M5 _# fCheckout()
4 i$ K) L, U* U% J. e M" n+ E{
; p9 y+ N0 Q( J+ `6 Y0 W- d+ s cin>>ax;% J( |8 s; Y2 f& w. o3 `8 M: C- [
length=strlen(ax);
8 y- K% \8 v& O1 |7 l8 Y}4 e2 F8 r1 k: D7 k8 E
void cxc();* @& q' j8 i9 m; c" H2 ~1 ~
bool qyu();0 B) R5 y; i I. d
void add();3 `$ x3 m2 ^6 K: |3 Z& N& |# S
};
% Z, c3 I+ \% Uvoid Checkout::cxc()
' g# m9 `1 F, g{
+ ?- ~6 a9 A2 efor(int i=0;i<4;i++){+ _ r, y: Z5 q. K! @
ax[length+i]='0';) O' b+ U1 h& }0 @+ d9 |% z
}
# n- G. J6 W5 o) A! E- x}//将输入序列后加4个0# w* ?# f* o1 C# I% X2 ~
bool Checkout::qyu()1 b" Y6 N* G% m0 E
{0 R! H ~: i9 e' x- [3 I
char c[5];
7 R2 K- U% J4 J) c. r; ^8 A# Lint i,j,n;
: ~% ^! V' `* ]* T' w: j( a; {/ Gint m=5;
6 q. J8 X( \4 }1 s- D: G, Z% qfor(i=0;ax=='0';i++);+ H" K2 m6 I7 |, K
if(i==length)
- ]& d+ j7 X4 k8 e9 U9 G {cout<<"余式是0"<<ENDL;
4 j$ @8 w+ A5 k q: H4 m1 r8 ^0 v cout<<"发送成功"<<ENDL;3 y7 c1 f- A% E& l% q) z, \8 O- Y7 H
exit(0);
R. p) a( V+ j4 y8 L% k% G }
4 y5 r8 S2 q7 _! y' A W' felse{! Y- R* s2 N- w. M
for(i=0;i<5;i++)
2 L) b: e2 P' j6 w. d0 V7 K, w p c=ax;
z& L1 g8 O( h" Qwhile(m==CRC)
" r' R' p) ^5 X' N: {# }( |% ^0 W{ for(j=0;j<CRC;J++)& _: C5 A" `- V5 {
{
( F2 N1 f$ O. u if(c[j]==data[j])
! g. J+ M- J6 P6 R, a. S c[j]='0';
5 ~: K& x$ @- P else
- h+ E/ N! ?/ Y# J/ G( u5 W6 r( D c[j]='1';
) k" ^# k) v; _, P. L# ?! A" C }
1 b1 f! u6 [4 S& y9 @4 j1 M+ } for(j=0;c[j]=='0';j++);3 I# M5 a1 b; n: P2 N2 ^7 K
n=j;0 I9 F: e, h4 I t" X4 \: N+ g
for(m=0;m<CRC-N;M++)6 R; ]3 B9 ]4 q- g) I9 ~$ u
{' j2 C+ o+ h. N
c[m]=c[j];8 m" V2 t, n) m. S- p
j++; H7 v4 I$ S7 Q+ o: |$ q+ Q
}! [9 s" [7 `/ I0 `2 x4 P
while(i<LENGTH&&M<5)
/ h+ s9 H/ J# Z" f. J {% B% m+ ?+ X8 B" T: `
c[m]=ax[i++];
+ x0 T) A% ]: p) ^ m++; 3 a! p6 L2 f# H
}# \5 v6 S8 G5 {3 {7 ^& O! f" s
}
( G- Z* B5 |. v" H}
! c9 W- N& M7 I2 Bint k;" Z. J* H7 `7 ]/ t; l$ N1 C
for(k=0;k<M;K++)% _) }' D1 R! l0 B- Z
bx[k]=c[k];4 }' j2 K0 m5 T8 V* o
for(j=0;bx[j]=='0';j++);/ z3 I" j! u! C5 k, J: n
if(j==m)! M% `( R6 T9 D: k$ S9 \( ^$ ^
{cout<<'0'<<ENDL;
; o( s+ l% k E* y2 v# T$ h5 J7 p x=0;1 d" {5 z; K# F; ~; R
return true;
( p8 M) o3 e( X& n& b3 }. Y2 s }
- c2 r2 @( ]8 ^' |4 B- g else
! q/ i j0 S: e. C7 C4 R2 l {for(n=j;n<M;N++)* ]2 f1 ~0 q7 ]
cout<<BX[N];
9 g4 U' k4 F6 m* E2 E x=m-j;
: i, Y. B+ m. h) M- N cout<<ENDL;; L6 [. p( f3 q8 u
return false;
4 z- n7 V5 }" `* K }6 F. e4 g: z9 P
}: ~( }1 y9 L# B/ s9 w- `* S
void Checkout::add()
7 j/ Z- H8 z7 S5 m+ D; o2 j7 {( Z{
3 H6 k. V1 Q' q |/ W+ |( Bint j=0;# V0 w8 Y. }" U$ N7 b% o* n/ R2 |
for(int i=length-x;i<LENGTH;I++)
% | F/ O. q; C" r; ^. Y1 b+ a ax=bx[j++];. G$ T7 \& B4 |# j+ j
cout<<"发送的序列加上余数后变成:";0 V0 m' ?/ T* [- [4 r
for(i=0;i<LENGTH;I++)* q L- t4 a: x; C( X9 l
cout<<AX[I];
( {( G( h7 e3 P3 L- Y" D6 ?& t" s" p cout<<ENDL;
& n3 _% @1 o% t) k} }& A/ U- u" `
void main()1 h. C# F4 t3 Y3 p
{
! A% i7 \/ g `7 d9 ocout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
) y% R; H! E. c0 h* Q4 x* V cout<<"请输入发送数据比特序列:"<<ENDL;
9 e. b9 t- }4 i# _- { Checkout test; O9 M3 Q' K x6 t! C/ m3 r' h: A
test.cxc();
; t( r& f/ e- g+ G& q' c5 M' s cout<<"余式比特序列是:";5 x$ }+ v" O' l7 c5 |
test.qyu();
; O4 Q8 H% H7 `0 v) ` test.add();& ?, R- j" w4 Z* \. f( C( Q
cout<<"试试这次是否能被整除."<<ENDL;) G* ^$ \# V3 R4 R' J# ]
cout<<"新余数是:";
$ N" l6 @; ~# ~0 x) C if(test.qyu()). _( a$ r" G0 S2 Z6 N( @# U
cout<<"已发送成功!"<<ENDL;
6 R) e0 L! Z; X3 I else7 X% j; N+ B4 p
cout<<"未发送,失败!"<<ENDL;0 W1 J; K2 g) U; D5 w5 E- q7 h! S
}/ U0 O; K2 G7 B
[此贴子已经被作者于2005-6-15 20:46:33编辑过] : U/ c# H( d% D0 r2 k
|
|