|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊2 s$ T2 `: I- t9 i a
#include<IOSTREAM.H>9 C8 p3 C4 k" P2 m' D Z8 P( h
#include<STDLIB.H>/ V/ J( H8 g8 Z) v5 w
#include<STRING.H>- p7 T+ r! J$ k0 n1 V6 H% d
#define CRC 5
[5 p+ f' b ?: Y+ i2 B1 q s7 {4 mchar data[5]={'1','1','0','0','1'};
2 r5 v9 W; b x N( tclass Checkout& Y0 e( _5 |- u
{
/ D9 q8 m& S/ nprivate:
2 t" ^% A+ Y6 ]+ D, Fchar ax[50];3 {: h; i+ F; g& [& H1 {
char bx[4];, J- G- k7 h2 x) f. J
int x;0 t5 C7 }3 e2 `% M- f/ c' B. z
public:
( N* W0 ^5 _. H o% ]+ I4 ]int length;- d, u. n- G; g- R1 m) V- W$ H3 R
Checkout()
! H* S |$ o8 {0 F* R R{ 1 F: u v6 n; b( B9 a/ [: g- `% q1 T
cin>>ax;
1 l( S$ Y) v; j# R+ v$ G0 ? length=strlen(ax);8 }& X: z9 @/ F/ \4 J+ {
}( O% N+ {" l8 f! ~! J
void cxc();
6 n& d# Z8 n% a) k0 zbool qyu();
! m b9 }5 Z" Ovoid add();
6 l- k# M/ U8 m% Q5 Q};) \- H! b0 x5 Y6 `: t# U# c
void Checkout::cxc()
# u; j4 {' t k+ y- j{% z$ P/ L; j. J4 J
for(int i=0;i<4;i++){ C, ~# |* I2 G, X6 [% {% Z
ax[length+i]='0';" n2 L( X) i1 K8 B; q
}9 Y1 E/ R6 g1 ~; T4 I) E8 f
}//将输入序列后加4个0, g6 j: M, d" D" l
bool Checkout::qyu()1 y; R* k# ?, ?4 u* W
{* O& \, B3 `% _0 F! E5 C L
char c[5];$ f% J) d$ e5 E8 ^* m" R
int i,j,n;
8 v; i5 g# U/ a, {/ G6 Rint m=5;
* T0 u; h% A& w5 p! l. d! ]for(i=0;ax=='0';i++);( S" I4 c1 Q5 t) u( L$ ~/ Z
if(i==length)
; n8 i/ p# \- B! E$ y {cout<<"余式是0"<<ENDL;6 h) `* i7 ~9 i, E; m
cout<<"发送成功"<<ENDL;
' f l1 v9 h" b9 v5 q" n7 K! Z exit(0);
2 @+ g2 `3 I$ I/ w' O, O) _+ S, P }7 {, k4 B% A5 u' g5 `
else{
8 e5 L0 W* C. F" l' Lfor(i=0;i<5;i++)
8 W* `9 l6 q5 ^ c=ax;+ r, S L9 p3 ~) a b: j
while(m==CRC)9 i! e$ k2 ^- u& k
{ for(j=0;j<CRC;J++)
0 e/ j( M' b7 ]8 i. K {
% l9 j1 ]2 w: X7 `* a if(c[j]==data[j])
) i' {& a1 t; ]8 ?4 e c[j]='0';3 U+ s8 x3 N; L, u) y0 x
else: s8 J4 Y; j- a) L
c[j]='1';
) N. ^! H" L- J: O. w* t }! {; H, i+ l- p) t- I' c: B2 ^- O
for(j=0;c[j]=='0';j++);. @7 I% _2 c9 G( X( H0 T a5 j$ H; G
n=j; k, V6 v: V ?7 j& y
for(m=0;m<CRC-N;M++)7 R! G5 T1 U* t4 h
{$ o, p6 h* K& ]" t
c[m]=c[j];
& B% Y. y* w9 H! B6 v" O5 b# Y j++;; j" o, i" C- O+ ^. I L, j8 S# C
}
" T9 c+ a, Z. T0 Q3 O while(i<LENGTH&&M<5)# I: }" C. V9 x! R8 j# n- X
{
: C* G" c7 t/ L c[m]=ax[i++]; & P5 ^) Z. A6 u3 A0 z4 D: j3 O9 r
m++;
3 f) H/ O* O; ?( V" p# s }
2 a" L5 o0 u' ~* D+ l}
7 @6 F; Y+ _0 Q" f7 k}
- g0 X$ s5 R+ |; L5 d2 `int k;
$ N6 ]& O( W+ Q9 E, j9 Cfor(k=0;k<M;K++)( V$ u P \# F
bx[k]=c[k];9 m! n0 P" ]2 \0 F" [2 \& b( ^
for(j=0;bx[j]=='0';j++);
5 a- i1 V9 ^# ^$ t2 ?1 m3 J if(j==m)3 ~+ J0 h3 a$ K# S
{cout<<'0'<<ENDL;
* @0 j5 d; ^0 d: e$ K x=0;: f; K9 d$ F& i7 N
return true;
6 _! r7 P) b5 v+ k( r }
, t! `* L4 I) W/ S else3 m+ E, L# C" S0 ] \- A
{for(n=j;n<M;N++)' h- ~1 e6 u% k& Q; H
cout<<BX[N];( X+ L# n0 x/ ~ G
x=m-j;; Y5 W3 l' T! m, S) |
cout<<ENDL;* E, m5 h0 a$ @9 V# g
return false;
8 e# M, q# a% t }5 r# H% k$ A4 c, _) a2 r9 c0 [
}5 I# m% y6 C8 w+ X. Z4 f
void Checkout::add()2 H! b' C; {, t7 P
{
: o5 D' I$ F _int j=0;
! ^ ?! p5 F0 A# h, Z2 [0 t9 X for(int i=length-x;i<LENGTH;I++)4 t2 ]+ |+ r6 @: N0 Q- u q
ax=bx[j++];
& O$ {- N* G3 V9 M1 c# L: B cout<<"发送的序列加上余数后变成:";; G9 }& C7 m, u) ?+ e/ X. w, @( @8 N2 `
for(i=0;i<LENGTH;I++)- i! R6 z$ I: x
cout<<AX[I];9 l2 t! a. k. X+ @* T! s+ I! _
cout<<ENDL;
. K; w" p* V/ Y% p+ Z# y" Z}
4 P* ?& e5 @# R5 }& U' z5 F, wvoid main()
- |2 I( T5 A+ u/ G9 F1 X{
' ]! G1 p( x! o& M& Q9 jcout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
. G7 p# \/ A3 i/ u& j; k8 E cout<<"请输入发送数据比特序列:"<<ENDL;* o' h: A$ v( U
Checkout test;1 }5 M8 U/ `5 ]8 U+ c9 m
test.cxc();
( B% u0 m9 N8 d) v1 [3 @4 g cout<<"余式比特序列是:";( O% ^: ?7 a! o7 g8 U: C2 ~
test.qyu();+ }* p( ^% `% R, z! J6 W8 \' s
test.add();
% F0 v, w, s! V# Y" e0 v& o cout<<"试试这次是否能被整除."<<ENDL;
4 [1 b" r4 m j$ o- @ cout<<"新余数是:";
/ m0 k. R7 k' B if(test.qyu())0 _- ]# k, w# ]
cout<<"已发送成功!"<<ENDL; O# Q5 | J# [: \$ D
else
z" r* D) E3 T cout<<"未发送,失败!"<<ENDL;; g* A6 R9 p1 }
}& `2 \) ~. T) {
[此贴子已经被作者于2005-6-15 20:46:33编辑过] 7 }+ ~% z+ x6 q! P+ D
|
|