该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
( T8 ^" a$ }# s2 ?1 w& D& Z#include<IOSTREAM.H>% o. R7 D- n& D9 z+ w0 _9 ~0 E
#include<STDLIB.H>. e0 A2 K4 S# W: f+ ]% u
#include<STRING.H>1 R5 p% b; g# d' ^
#define CRC 5
' A: o) U4 L" [; _3 u! e# j3 ^char data[5]={'1','1','0','0','1'};0 P x2 i$ x" h+ `- M
class Checkout4 R& o9 @/ t: [' @7 R; c% |' B
{
* w5 A0 ^' Q" Yprivate:
1 W" m+ @( Y$ D4 _4 K7 \) v; tchar ax[50];+ k& Y) Y/ j' |9 O9 \0 B4 }
char bx[4];
4 w" g. t d# d5 o; Z, Oint x;
! k, m: T7 m, J) Dpublic:; O: {* o0 a; i" ^
int length;
, ~2 z3 v) Z" B, c6 t# o% u% HCheckout()) f/ V- \" F6 C/ q. k& w% e. I
{
4 f' \ B4 S6 Y5 T. g D cin>>ax;
: C% M' D! D- I3 ?$ g9 d length=strlen(ax);
. S3 V+ X% h) g" _& ]3 Q7 l4 `! a}
6 J9 f' v) @, \void cxc();+ @4 }& Q7 F) ^- s+ z' d6 W4 V
bool qyu();
; S; O) m5 K/ avoid add();% ]7 R& K8 a6 x5 b
};
+ i; d" G" \: E( `9 F4 _) J, a: qvoid Checkout::cxc()
% D" X2 a. k; i1 M- N{
. \( s8 B3 R: G7 n3 ^for(int i=0;i<4;i++){# k# w; e0 q1 x! a# D
ax[length+i]='0';5 C; y* C7 L( ~$ ^6 T
}
: `" d" W, K9 U$ A1 h5 x/ s+ K0 `3 G}//将输入序列后加4个0$ {. S* J9 t/ o$ b
bool Checkout::qyu()% r, p1 s& M& g$ @% p4 {4 B
{8 s7 _9 ] x$ d$ A, M6 p4 _# X2 F
char c[5];$ |& m# s1 P; [7 _/ U- Z! E! ~
int i,j,n;2 ]5 m4 u/ J* S# l$ ^7 h+ S
int m=5;
& X/ n! M) X9 R! B+ b1 _. _for(i=0;ax=='0';i++);1 i) O, x3 Y. C* \* z
if(i==length)& H; z, `# L; G1 Y8 s5 e0 `
{cout<<"余式是0"<<ENDL;
% z; |# G' T/ s Q) ` cout<<"发送成功"<<ENDL;% C# p' R+ N) ~- f# ]2 x, d/ p
exit(0);+ ?4 C* P$ }5 }
}
. B: s- `* u2 u+ P6 f4 {else{
" H& i; E4 f5 Pfor(i=0;i<5;i++)2 U1 i# A$ w+ S4 J+ y$ o' t
c=ax;
% ^. i3 ^2 F7 ]% twhile(m==CRC)) z9 [! {5 E; d: ?0 J7 s% c+ S
{ for(j=0;j<CRC;J++): }& g4 x5 h; v, q9 Y' r
{
3 }0 t S& `: X0 l! g: p" s if(c[j]==data[j])6 s6 u% o" I5 H
c[j]='0';
; |' j/ e8 d3 g& U else
8 R. v, q: n( i8 K* }& l, m c[j]='1';3 g, V' S. Y- z' j7 Y7 O
}
) P! u, \5 U8 d) [" ~% q for(j=0;c[j]=='0';j++);
' v/ l J5 N1 X n=j;" P* g0 P9 }! H7 f9 W v
for(m=0;m<CRC-N;M++)
5 q1 _! r0 m" ^7 @- e. C) s; b {3 ]2 _! U$ Q% J# q
c[m]=c[j];
% q& k2 r1 _ r8 s1 w j++;) N4 v! Y( [( r u
}! ]7 i& l5 `% }# m
while(i<LENGTH&&M<5)/ V8 Z- C; c8 |1 ` s4 t
{
# h7 j% d! C6 r, T* e, K4 R c[m]=ax[i++];
- P. ~9 a( S f5 u6 j m++;
( D5 \* _9 X8 b# Q7 f$ G }
# n( K8 v( W6 N}
`+ `' Y- o) m5 }6 c5 a}
6 w* {6 e% j# q* t9 e) Lint k;0 J3 ~6 m% M; p2 D% u
for(k=0;k<M;K++)" \8 B8 G! K, o" R: S" H
bx[k]=c[k];
! h5 h/ k+ @, V2 J$ p/ Cfor(j=0;bx[j]=='0';j++);& @! C6 m! F/ M* ]& Y- G. `9 l$ m
if(j==m)
+ E0 S( t" I2 z; a' g {cout<<'0'<<ENDL;# o8 C2 [$ k9 R- P9 W4 O4 ^, {* v
x=0;
3 I3 w& u9 S( a3 T1 V return true; n/ W0 D9 X [4 I$ ]( p6 e- ^
}
5 s, k+ A. q I* l' I! s; q/ A' L' G* L else& _ Q4 t) Y, V* B3 J$ B1 G, U
{for(n=j;n<M;N++)2 u' ]. q2 X3 r1 P
cout<<BX[N];
) `5 M, d0 k) n6 C/ l8 K x=m-j;/ h9 M2 F L" Q% I$ H6 g7 P7 [- k: u2 Z
cout<<ENDL;
7 _2 N! p W" w$ U return false;
9 P& |3 S8 M# ?8 t( ^- ~ }% G2 I# F4 v- R$ a/ k
}
# t! W! ~3 E! W" y$ U6 \void Checkout::add() @' i3 B ~6 b8 v6 ?; b
{
( F2 T; [; D6 C# u/ Bint j=0;1 t: l i9 [* d+ @2 l( x1 ^: ?
for(int i=length-x;i<LENGTH;I++)
$ o! a b6 {: ^/ M+ l* y ax=bx[j++];3 X. ]' q$ g( C& J
cout<<"发送的序列加上余数后变成:";) w+ _' z, ]; m6 N n
for(i=0;i<LENGTH;I++)
1 D8 A2 [% T) ?2 }; x; [ cout<<AX[I];
. @4 q1 j, U7 D* i' j! q cout<<ENDL;, c9 `6 h% v1 Q! ?, Z$ u V9 ~, d
} s1 u2 @+ S# u( V! b* X7 v
void main()8 n0 @) X: g5 }% p3 N
{
/ [1 q! g9 a7 ?9 `; U9 { ecout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
. J2 ~) z5 Y/ g, A; G cout<<"请输入发送数据比特序列:"<<ENDL;- f; K# G( p# U: F) i/ y
Checkout test;/ ?3 l7 d8 K; k" w/ v
test.cxc();
9 ]9 h b' c0 B! A1 ^9 u cout<<"余式比特序列是:";0 H2 v C: I) ?0 \7 ~5 u
test.qyu();( J- k# ] p, W9 _
test.add();! t- N6 I# W' g: U# a
cout<<"试试这次是否能被整除."<<ENDL;
0 j. r, K" f' Q9 |% { \ m+ \ cout<<"新余数是:";
; H* @! a5 g+ ]; Q- y' L; L. n& o if(test.qyu())$ d) A* m+ k- K% ~0 b" x; v3 x
cout<<"已发送成功!"<<ENDL;
( Z% u" F5 W7 P2 q7 U1 r+ c2 ^ else
8 C& J8 p1 |; I1 G cout<<"未发送,失败!"<<ENDL;
* i: z9 @7 A& X+ S8 n3 p}" f3 m O% Y& Z2 k0 B; o+ D/ w Q/ r
[此贴子已经被作者于2005-6-15 20:46:33编辑过] 2 M1 D, o B; X p) z- H0 _2 A1 C2 M
|
|