|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
; e8 d. X2 C1 {% Z! d0 i! Z$ {9 r#include<IOSTREAM.H>' D4 g$ P" {8 E- m2 F
#include<STDLIB.H>5 D1 R! a, h: \" D. n5 w% g/ N6 R i4 q
#include<STRING.H>! u. N, F* B1 T2 u X
#define CRC 5
$ J& c! v$ s: Fchar data[5]={'1','1','0','0','1'};1 C+ \: b' c) }1 W. G. p8 ^) h
class Checkout9 ]0 D3 t* t/ y7 }- U2 k- \
{- v- b+ S/ e; y& H
private:$ p8 ^1 E6 O5 a" o4 J- Z2 B% `
char ax[50];2 ?5 J. }# N, g( T2 s' z
char bx[4];
( h1 T) R( M( x( U1 Vint x;
5 |- O# N$ ^# R. wpublic:0 z1 ^6 w: H6 t- z* P& o2 C
int length;. e5 e( r$ z" d& b" _1 i& a
Checkout() S0 H9 c8 D5 `0 \2 u$ k; Y* T
{
* F6 K; A! Q: x. L5 ` cin>>ax;+ ]6 S5 }' J& U% ^+ D, X
length=strlen(ax);/ T' Y# t L" b
}
1 V* k- D, N# K% Z% k) U7 vvoid cxc();
; k6 f# W. R# E# s) Y. ?bool qyu(); M$ e5 Y0 q E
void add();! V8 {! R& M! c+ c
};" l I6 ?4 y# L6 E6 v" e: [6 y
void Checkout::cxc()
8 e! C* j3 Z# h4 m3 Q( }! X{" R8 @3 P! y% q# j* \
for(int i=0;i<4;i++){. {- ?, M* Z: K) k
ax[length+i]='0';# ?0 }0 L- q" L* _$ o! ^8 H
}; m# ]& K7 _6 N
}//将输入序列后加4个0+ ]& L3 s* |' z/ ] S: r4 a
bool Checkout::qyu()
0 ]+ ]: R) [* _# \3 M{/ K& m* T/ B! Y1 {5 ]: \
char c[5];
% L# z, E0 [+ ^5 jint i,j,n;
* J% n: ] i$ R1 {. ]% F, Lint m=5;
: l4 Y% ~9 d+ S& Dfor(i=0;ax=='0';i++);! [+ \3 n8 u5 x
if(i==length)
2 N, }/ f! n0 W( u" d0 y/ D7 H( J {cout<<"余式是0"<<ENDL;
' N9 q: N- @( E$ f9 |# d cout<<"发送成功"<<ENDL;& A+ J# \! L3 j4 K( z
exit(0);) q# k: R. Z/ z/ o" |4 p4 S
}: ^0 t" i# ~! L. @1 c% m2 @+ p
else{ z9 E& w- V% U$ C2 h" K- V V
for(i=0;i<5;i++)
' ?) B8 l' l5 H+ ?% ^ c=ax;' \4 q$ q8 T$ Z/ Q# ]8 z1 t: N3 _0 C9 D
while(m==CRC)
! I" P9 f$ Z: h! V- b{ for(j=0;j<CRC;J++)
* m1 J1 V/ L% k: [* ~1 b% b; V5 G7 E8 \ { , G5 Z! |+ E3 t
if(c[j]==data[j])" G3 S; S/ }9 d8 m4 c& H
c[j]='0';
- k5 Q: C0 T3 S6 x. a# ` else
0 J. y3 Q: W$ X6 p c[j]='1';
+ \0 U ~% S. _8 M }5 R+ e; S R+ _- [) B
for(j=0;c[j]=='0';j++);
+ e5 C8 |7 l: A4 |& z n=j;
8 J8 P1 I+ {" N8 C5 w8 l! l" Q for(m=0;m<CRC-N;M++)
( W" a! @0 K# R: y$ T: p$ H {
7 k/ U) j2 s1 v3 W2 K, | c[m]=c[j];
7 _5 p, `9 w G. k: i6 ?4 D j++;
* } J: A* U: |0 c; w! j: b- |& w }# P1 ]5 k4 S; F2 n0 c/ o& w+ h
while(i<LENGTH&&M<5)$ B% |- `4 N% M$ q
{1 O0 u+ c* @1 d; N9 ~3 V/ S! l
c[m]=ax[i++];
9 v9 D6 M0 g5 I1 [. \; E0 z" X m++;
: @1 A# O( s- _4 n) ` }0 ?4 U1 d; e" I: ~' e
}
3 ?. \) h5 a h. f& P# F}2 F# r D. u2 s3 i6 P
int k;$ j, O; }% e8 c. ]1 a0 {. X4 [. v
for(k=0;k<M;K++)# l8 k# d( |5 K. L
bx[k]=c[k];
+ a/ p6 D/ y/ W0 h6 e' Xfor(j=0;bx[j]=='0';j++);
& V. H2 d. s5 D if(j==m)
0 T4 b, O) a' Q% W$ z3 i {cout<<'0'<<ENDL;
: w0 D' N2 q8 P9 |; E. U* A x=0;! O. s9 j3 g6 V3 k
return true;+ [6 y+ h \" v+ t4 {( r
}; B4 X) ^( C% G* v) U
else# S+ ~5 A" Y n8 N! j2 j
{for(n=j;n<M;N++)6 K7 T* J; v) b }! i
cout<<BX[N];
8 n& L. O$ X5 s7 I% c8 Z x=m-j;
1 t. E: n9 a. Z# \( Z0 q7 e cout<<ENDL; p4 O& z( f, w8 Y
return false;4 J' P4 v7 _7 @ ]# @
}$ b8 Z9 Q- K; w) ^) @5 `
}
+ {3 r {5 n' k1 Vvoid Checkout::add()1 B* B' X5 ^) ^6 A/ {; C
{, G) l9 r! m- m8 ^4 D+ O
int j=0;
1 g9 k& l! W& m for(int i=length-x;i<LENGTH;I++). h1 e6 e/ k/ w8 w
ax=bx[j++];
" X; U+ `: h% T# i* i cout<<"发送的序列加上余数后变成:";5 n0 _0 s3 v1 k' B
for(i=0;i<LENGTH;I++)) ]# U Q! A+ Q @
cout<<AX[I];! y5 g7 g+ C9 a! |9 F4 U
cout<<ENDL;( H6 n; d* a6 p! }! M ~4 \
}
6 \" _, t, I) ^ L! }& x4 avoid main()% M9 ^7 d. g* T! B' I" _9 l0 Z
{ & W& q- s" G2 j1 o" ?
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL;
# s O4 N# x& K6 _, V0 S+ Q cout<<"请输入发送数据比特序列:"<<ENDL;
# H$ q9 w8 w: u Checkout test; H [- O: W i" A
test.cxc();
' G% X4 \1 Q* i7 ? cout<<"余式比特序列是:";5 k5 ?( L6 l( ?# L$ ]+ Q# t- s
test.qyu();- D) I: F2 w0 [1 B9 r1 Y
test.add();5 K" }1 }( d0 x- m- N
cout<<"试试这次是否能被整除."<<ENDL;
& h% c2 U1 d8 r cout<<"新余数是:";
- s8 ?( H$ S. t$ G$ R5 |" i, N/ u if(test.qyu())! Y2 @1 j2 Q5 R+ f! v9 S- o0 y/ }
cout<<"已发送成功!"<<ENDL;
2 W* o$ O1 w4 h( r4 P1 a7 E else2 }# D+ j- e+ }: U& q R3 Y3 c! c
cout<<"未发送,失败!"<<ENDL;3 ]! ^+ i% }# f. d( J# b
}
+ e9 o0 G5 R, x; p& B& y[此贴子已经被作者于2005-6-15 20:46:33编辑过] " i, {: J4 d1 p3 F3 p$ h
|
|