该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
5 i5 ^ {/ U: F& [" Z" y#include<IOSTREAM.H>/ c+ l% J- m/ A2 y
#include<STDLIB.H>
0 }% d& F7 l/ \#include<STRING.H>
/ _$ p9 C) Y- H2 \! i- X#define CRC 5* p1 o6 M3 ?1 S0 s( E
char data[5]={'1','1','0','0','1'};$ f* m6 F L/ Z/ z
class Checkout' t! N1 O5 \* x: i) G; F! ~) ?
{) B( A! T3 \' I) V N
private:0 A2 O" h7 }8 p, @
char ax[50];
3 ~# i! T B* p& w6 hchar bx[4];
$ F' K! b/ X$ R8 z. N" xint x;
4 ~. B. K8 O8 u) h) Q7 p( Ipublic:
* ?- d% H/ h' t6 [$ [& Rint length;
2 f I3 I$ @5 TCheckout()
% e i! c4 o3 p: T{ # X( h/ z5 d9 ^# O# R
cin>>ax;
" V+ s, Z: Q; I+ T y length=strlen(ax);) `* U5 L5 u, I: ]# S% j- Y
}7 W, l+ z, L K: U
void cxc();
/ M5 b3 G7 X1 C1 }9 Ibool qyu();
& p& B5 z2 R& tvoid add();+ `# @9 z7 p* p& \5 M& W* v
};
' l" t4 o. ]8 ]4 wvoid Checkout::cxc()
6 ~5 t) w+ U4 R{
) V9 h p) F9 C* I6 I9 rfor(int i=0;i<4;i++){
; D: b& P) @* m& s$ w1 F" s8 ^2 [ ax[length+i]='0';5 J) a: ?# M2 D3 ^
}& v0 D9 X' P% }: X( s$ r+ x
}//将输入序列后加4个0
+ j- D! U/ X0 }3 L; ]5 ^bool Checkout::qyu()
8 R" [# P) D0 P{+ X$ l/ e4 @6 a# E4 s5 b8 o
char c[5];& ]- D* N. y. j
int i,j,n;
( V# ~( E; P+ f5 A+ R6 K ]. Oint m=5;
r/ Y9 j; F- p6 M/ @1 |for(i=0;ax=='0';i++);2 g9 i' j2 C, h$ s& l+ N
if(i==length)8 x2 z% ?: q# \3 v$ t$ P0 d
{cout<<"余式是0"<<ENDL;0 {7 g$ v( ?1 i
cout<<"发送成功"<<ENDL;
% c$ O# J1 `" G exit(0);9 I& ~% Z- v7 A9 ~' b3 ?
}: i$ i) G2 w' J
else{
/ c& {4 h3 i) |1 y; [for(i=0;i<5;i++) M, ?$ ?! m, Q; O- x- t+ O2 p* W9 _
c=ax;5 e6 Z3 ~) |: b9 M x' ^
while(m==CRC)
/ w5 J% d( R( d+ y! \{ for(j=0;j<CRC;J++)5 A% ^) {0 B: Q; y$ d) J% `$ O& ^
{
* i; F9 ]8 j: H if(c[j]==data[j])
$ e/ D6 g( X0 v6 E3 f; T( K c[j]='0';
$ l9 N, {" F- \# ^ else9 Y& u) c+ p/ `
c[j]='1';
, E0 Y; r% c) w }. M3 ^+ c+ |: R7 A; C
for(j=0;c[j]=='0';j++);3 _6 t- J5 {: j& t5 z
n=j;
/ U3 T8 S5 ]$ H7 v" r5 E for(m=0;m<CRC-N;M++)
2 p' j( ^ j. |4 e5 K! l G {
0 M. u- G0 V3 e& b* S c[m]=c[j];! C: V5 Q* b7 P
j++;
/ c L$ @- W, W+ }1 t8 E }
" Z* W1 R0 H% A& K3 t6 X" w while(i<LENGTH&&M<5)& b' r4 F$ m7 t! _
{
- N, }9 f8 P/ k( b2 j c[m]=ax[i++];
7 `( z% V ~" H: k4 q9 f( h m++;
5 j/ T6 h+ C+ |% E3 ]7 X2 j }
7 ~* [$ u2 H. C, ?- `}* O( ?, \, X1 B1 ]2 ?# B
}. \, ~: a, X- Z. H
int k;3 U0 a/ ^$ @6 J7 x+ R5 A0 c
for(k=0;k<M;K++)! t& {1 \; Y2 b
bx[k]=c[k];
9 F) v2 j7 J, H! l# R& Vfor(j=0;bx[j]=='0';j++);# K, N) J% v$ O1 S# b; v6 H
if(j==m)
& c) \) m5 g' J$ a* F% U {cout<<'0'<<ENDL;7 {# o! P& S$ o* a$ M0 j1 h6 [
x=0;6 j9 B( V! W4 Z( o, P! ]% _
return true;
8 u( u( J$ t# q, d4 T( ` }
K5 z E+ P2 Y$ t' \, i else8 K7 C* b1 T' o% C" o
{for(n=j;n<M;N++)3 ?8 }" V# x- `# w1 I$ e e
cout<<BX[N];
/ ], ~9 ]7 v2 e8 [$ X+ L4 w& K, T" ?6 @ x=m-j;! W8 C, a" q i
cout<<ENDL;
) q" E! K, z3 l$ g! B' n; D return false;
/ F. \/ h7 f9 ^2 a }7 n0 d# V4 w0 V, z/ v3 @! s( T5 B% i. O
}
4 H# ^: ]9 F" c* S: d8 evoid Checkout::add()& @9 m& G, g8 y, l
{
" M, @! [. X$ y+ n& s4 R' sint j=0;% ~0 [7 ?1 d: O* L* {" \
for(int i=length-x;i<LENGTH;I++)
' Y* Q) c2 D$ P; u7 Y0 k4 U7 [+ s ax=bx[j++];
) u0 R6 H4 N! l: d7 } cout<<"发送的序列加上余数后变成:";
' l/ j# z( @1 @' H# K5 @* Jfor(i=0;i<LENGTH;I++)
* t* B9 _' T0 e3 y2 ] cout<<AX[I];
$ A# s. ~0 I4 X* s( p cout<<ENDL;
' _& V i0 i+ @0 x* `4 Y}6 \+ X6 d3 K* L
void main()5 t2 I% ^! W _7 h6 V# E
{ 4 J# w' y3 \1 n8 B% L. v2 _( `
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
( q2 C' K |0 F8 w5 Y6 W0 O$ m- c, c cout<<"请输入发送数据比特序列:"<<ENDL;
% S- K- E( t1 t$ r Z& p Checkout test; t- J3 [5 |: g, O2 ~$ H
test.cxc();: H8 n# R1 c' U& X# F! N* g
cout<<"余式比特序列是:";( G2 `$ ^" s/ _8 ]8 O' v+ `
test.qyu();
# j0 e# j8 z5 S2 |- R* {" S test.add();/ o I2 N5 h5 D- P& W( E2 Q! ]
cout<<"试试这次是否能被整除."<<ENDL;
9 B* Z* y9 q' l2 y cout<<"新余数是:";
' V6 E" {7 Y t/ U$ t if(test.qyu())
! I7 Y. C2 u2 m9 W9 d cout<<"已发送成功!"<<ENDL;
, \7 t5 Y9 @4 e/ W0 |8 w+ T else
8 e( U9 z* X9 p- ]6 B9 W7 x cout<<"未发送,失败!"<<ENDL;& T( V6 Z( E/ }4 R! J2 D
}+ ?* f* `3 X* o5 ?
[此贴子已经被作者于2005-6-15 20:46:33编辑过] 0 f& Y* Y6 @5 D5 j1 K# ?- R" e7 r
|
|