该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊3 q% N$ l) O1 t9 D- Z8 v
#include<IOSTREAM.H>, C9 k2 ~3 d6 F i
#include<STDLIB.H>
$ Y+ T! X+ i* i8 P#include<STRING.H>) \' X5 B: K/ a2 ^- l: J/ x
#define CRC 51 d% Y4 O- ~" R; V [
char data[5]={'1','1','0','0','1'};- {: |% N0 T [
class Checkout, D8 `" G) \; d! V$ b% c
{" C( K# [- `( m) U2 f( h- X
private:
. P B! {9 z2 Xchar ax[50];) `; V$ {/ Q6 k/ }9 g0 [
char bx[4];
+ `/ V$ P! S5 @6 i( ^ eint x;, m& C- `2 [: l5 x
public:/ N. y3 X: i# [
int length; E: v3 E" a* y
Checkout()! c% ^4 E" h, G
{
- \- W5 M# M8 I h4 C/ e cin>>ax;
Q1 H4 R9 J- Y% ?! S length=strlen(ax);7 \, P# @) N8 F* \. U
}
6 Q; m- x) W. [7 y' fvoid cxc();* V( f" \# l1 F# u$ _4 d( e
bool qyu();
# t/ l1 t# o7 C# ]/ ~- a* G' ^void add();
: S2 ~; A& R' a1 {/ n% A) ]# b};4 u/ P' ~* C; `$ N/ G3 Y: m' h" V
void Checkout::cxc()% z& c0 g0 |' I; A' l8 E i2 _
{
5 T1 n' ?6 E" l, X bfor(int i=0;i<4;i++){7 Y7 U* C' Z5 J/ z# o# L, D
ax[length+i]='0';0 n; c! G! |% u
}
8 d9 _' y0 q8 E, @& c# [% r1 e}//将输入序列后加4个0) R3 m; a3 n0 Y$ F4 i
bool Checkout::qyu(). l0 G" q/ m$ Z: y9 B7 X0 a$ j
{$ ?. f& C6 a Q0 k% {0 Q. _
char c[5];! K# n5 D. H' ?4 x; K9 g4 l0 O: Y
int i,j,n;9 |" f0 p0 j" K0 J2 G2 `
int m=5;1 m8 d2 r. I+ B9 q1 p+ Y
for(i=0;ax=='0';i++);' B# I& Z$ G, H Y9 a
if(i==length)+ A! h5 M1 l+ P9 }( e& ~2 c
{cout<<"余式是0"<<ENDL;7 ]& [2 l- |0 g+ k: G
cout<<"发送成功"<<ENDL;: k6 C1 }% F( ~% {: i& M$ k3 f
exit(0);8 c5 s5 p( u0 Z
}
- R9 A' c6 T2 Y, b. F$ X2 ]$ Yelse{" O; V$ s- ~/ v$ k! I
for(i=0;i<5;i++); K( T1 e$ X2 [ w4 ?$ T
c=ax;" _+ G1 u6 o, W2 I, @- `; J
while(m==CRC)
, u( L2 c; F$ z6 x+ `{ for(j=0;j<CRC;J++)" b$ |/ b: S) |( g; X. `4 V
{
+ ~% v; t4 n/ s/ s% D+ P0 Z1 h4 s if(c[j]==data[j])
8 K, N- C3 [8 m e c[j]='0';
! t2 f' t1 r f! s$ b/ v: n else9 H' @4 q% l5 |0 n
c[j]='1';5 H) G. G1 Z$ u" j6 g
}" C% a5 E2 H* `& ?# T
for(j=0;c[j]=='0';j++);
& Q' [+ g" ?5 m; X: ~ n=j;
, M! P3 w# T9 v" ], t for(m=0;m<CRC-N;M++)" Q# O( L3 V: [4 _+ _
{/ H; p6 v7 [' Z) T
c[m]=c[j];+ O. f3 _4 S0 \5 i
j++;
2 U. x7 w! ^( A' b }
/ }2 x9 b+ f3 i( r! U% ]/ J; A while(i<LENGTH&&M<5)
) q, N2 h8 h9 _, p {
4 n# E7 c0 W8 H, g' _) j c[m]=ax[i++];
6 r5 b9 q- \% w8 w4 w. F) k m++; - `! r M' _8 o' p
}
' c: S$ P7 g& H# S9 W5 I( ] ], P& \}7 x7 R5 m. R+ v9 t( v& w- p
}
7 X Y O8 {- h; Tint k;
: A$ i; |) Q/ H! Y4 f( ^8 f9 ffor(k=0;k<M;K++)7 B6 |' u1 y, X6 I: u
bx[k]=c[k];! S R- z0 O9 q7 X* I' ~8 Z2 V- y! g/ O
for(j=0;bx[j]=='0';j++);
% V& n" S) i1 V if(j==m)
/ `& z1 F+ y! n {cout<<'0'<<ENDL;! ?" D n2 A3 Q6 O9 r! \1 M
x=0;
7 Y) o* R$ H# W+ c8 t5 Q return true;
! }2 q6 Z0 u4 n$ X' G4 s6 g* q# T }
, i% I/ C ^) p' r else
7 u8 r' ]2 ~9 D: } {for(n=j;n<M;N++)
/ J% H) J) b2 \ f5 k" L. h cout<<BX[N];
u# o8 Q$ k. U, n# x) `4 W$ n x=m-j;
6 s7 t3 c8 t% D' N cout<<ENDL;; ]; D; n: k: n% g) F
return false;+ d% s. G, {+ r5 |) j+ W& A
}. G7 l% G* p+ J4 z# L2 k* H. O2 M
}
% g b: Y: x u) _. s+ {0 f: j) Bvoid Checkout::add()
6 P! T* \1 E+ F' k; o{5 Q5 b9 O) {- Z( f0 v# r
int j=0;
9 \' j" n! o, d4 T for(int i=length-x;i<LENGTH;I++)* D5 O2 R+ ^, h" z6 h, f
ax=bx[j++];
9 J3 I) j$ }4 T cout<<"发送的序列加上余数后变成:";4 @ f& i* [. o8 m
for(i=0;i<LENGTH;I++)
W0 ~% n3 G) n9 S/ E; J cout<<AX[I];
% g1 ?. ~3 `, a! E cout<<ENDL;( d, F/ D( l) P' N* j# K1 G
}; l/ h- \- \2 v" B# u+ w% n% z
void main()
. [8 S- r4 d; s2 Q. g{ ( ?7 V2 J; o+ Y* q+ \* _7 \* s
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
$ P3 q* \3 Y5 q% V& T cout<<"请输入发送数据比特序列:"<<ENDL;( J; I( n5 n( z$ B8 T1 k
Checkout test;
) `( L; q9 A) K% |test.cxc();1 `* ]) {% ^2 E' ~8 c8 E5 a
cout<<"余式比特序列是:";
* ]- k' h: q6 ^3 h1 d$ b$ g test.qyu();
6 h- _7 K, W# ?( M4 m2 \# v$ I test.add();
& P0 J+ B1 F$ ^ n4 e& O* |' r; } cout<<"试试这次是否能被整除."<<ENDL;
2 g9 E5 C+ v* B cout<<"新余数是:"; l" b3 {$ K) ~; ?
if(test.qyu())
. I5 a( ?- q$ g W* v cout<<"已发送成功!"<<ENDL;
" r: y! E& q3 g! \ else) r9 H W% k1 ?! W
cout<<"未发送,失败!"<<ENDL;, O& s8 ~# x. \8 d
}
0 M7 K' l* F; f[此贴子已经被作者于2005-6-15 20:46:33编辑过]
' u6 J. F3 z2 q/ r |
|