|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
, w2 h# G/ u) w2 h% f3 F4 J8 v#include
! g$ K, }- E N/ z; I/ t% F#include5 |3 L- f% f& k# g
#include
& ~1 ~! z8 x5 ^! e9 `# \5 l/ h* @#define CRC 5$ D; |: s* e' m6 [7 |/ O/ I
char data[5]={'1','1','0','0','1'};2 y z) ^7 i9 R
class Checkout
& L3 T( p+ V0 p{8 l$ M4 A3 _/ c) K4 A
private:
0 [" J& `" \+ u9 X6 p char ax[50];
& E# c% Y1 D& j, L- ] char bx[4]; W7 }9 p$ u( E6 a5 `, e! b/ M
int x;& H6 j. x6 n& U' x
public:
! N( C& ^5 s1 q' \% \ b6 {* k int length;* u/ k7 B% a& ~
Checkout()
- A6 q/ U( E( |4 P( I$ ^ { 8 z; Z, o5 F6 S ~5 d4 @* h
cin>>ax;
6 |. ?4 N% s0 N4 `; ` length=strlen(ax);, \6 U) O4 X: V/ b! M: B6 E
}
7 w( O5 N! _4 k0 B4 f5 X& K9 F9 t void cxc();
$ M: R0 y8 v7 I: ?) G, A bool qyu();( h8 p' D) C \; A
void add();
7 P5 | K) Y- p) a6 t6 U T};
8 h4 {8 d# T2 Jvoid Checkout::cxc()# k/ r* e$ C4 ?# L4 b7 j
{- O& q* i+ T% m$ h* y6 w( c* ], Y
for(int i=0;i<4;i++){
) d: u; m; G G3 v' B ax[length+i]='0';
# M) ~. z, i3 A% i5 h }
% n8 z s( N6 g7 O7 M. K# [9 k}//将输入序列后加4个0
$ B9 \; C. Y( f8 t, ubool Checkout::qyu()! t0 ~8 f4 R( ^4 g
{
+ M0 c: m& H8 s7 e6 { char c[5];
* v) n: ~. I7 g8 i2 Y0 s1 w( ^ int i,j,n;
" F. R% ]* \+ ^+ y2 I: R3 }- o int m=5; {% {( Y% x% e% |6 ], {5 [' Q0 C
for(i=0;ax=='0';i++);
2 T' C( ~0 T6 r) n' [ V& U3 N$ | if(i==length)
4 z! l7 h# L; @5 Z' @# a {cout<<"余式是0"<- z5 {& r. ], L# v' V( l cout<<"发送成功"<5 Y/ r6 X- g; r* m* j
exit(0);1 v2 m8 l9 f/ ~. P h- o W* R
}. V! Q( i% ^7 v3 ~
else{# X! S7 r' Y' E* Y8 t r' R6 O
for(i=0;i<5;i++)
- h% L [6 s& n( S3 M6 v7 n c=ax;. m7 x- p; q( C4 F7 o3 C
while(m==CRC)
, s- B, m7 H7 Y. K- Q: L1 v { for(j=0;j9 O' f5 j* F0 O8 Z {
" ?. Z: A1 E2 J: z f$ i if(c[j]==data[j])
) V7 O/ |0 ?3 {* s* `$ d c[j]='0';
. ~ _* P- _3 E+ y else7 W" \+ ~7 k+ s
c[j]='1';
$ }$ }' ^7 e$ m }
8 ]% }$ Z# y) {$ q7 f for(j=0;c[j]=='0';j++);
( w/ l7 i7 [0 L. V n=j;# Z, f3 N h8 J
for(m=0;m* g3 G/ w7 f9 z9 C
{4 B' L/ |, O: U. @1 f8 ~
c[m]=c[j];
) X b* J( t$ e$ P j++;
" c* U% u6 B6 A' I2 c* U }4 {% x7 t+ R4 W' U) e
while(i9 w2 n: l, W" g. ^0 [: p( @5 L; A {
% |7 k/ T6 ^5 N! x' x+ h c[m]=ax[i++]; 3 K3 e( v7 W; v7 [5 L: L) m* n
m++;
. i* q* F0 M& O% @* f% n }& P- b! l# }( u; I$ a
}% \' h' |$ ~* X% U0 m
}
, R9 ^$ {5 [( k int k;
4 }8 J/ ~+ P- G9 f" Q for(k=0;k9 }; O+ Q& w/ M6 s bx[k]=c[k];
, U+ s9 P' L B% O" ` for(j=0;bx[j]=='0';j++);
5 a. f) a! P. H. D2 T7 u' T+ M; ] if(j==m)% ?0 x3 ]' J' ]
{cout<<'0'< p! Z5 i! Q5 V- J) K# y: n x=0;0 Q5 c+ f9 P5 N. C* I
return true;
* ?% A' Q6 m( Q }
$ k2 G5 s$ H3 J& }' n) O; Y& l5 f1 S* d else
: t7 f/ f2 m& R6 N& @6 o0 C {for(n=j;n. T3 T/ d ^, w# e7 U
cout< C( F& e0 S$ }6 V$ s# {) x
x=m-j;2 n6 b. {. F5 |2 ~7 h4 m g0 {
cout<. w* @! ?2 B6 M6 H; ~9 a, n return false;% P" [$ o( D* f1 X
}
1 }8 h8 Z& v# }" t" U}
% b2 ^$ j& P; ~+ ^1 d1 Evoid Checkout::add(); K; {2 i! u2 I
{% i2 `/ I' k1 E% Y
int j=0;8 z' b. T; P, r$ _9 q* C0 L
for(int i=length-x;i' ?- A' J% S$ _: G- r ax=bx[j++];
3 D- h/ |. L1 B5 Y* \ cout<<"发送的序列加上余数后变成:";
, |2 m9 g3 l, c( J for(i=0;i3 _1 ?1 r: O+ S8 J2 {
cout<;
$ D8 v4 y8 {$ t- I cout<" J4 Z: H3 N% R8 m
}0 H' {0 M" U: N. ^) W
void main()0 ^: _, l) I4 p' U- N
{ 6 e" [, K( x. L; h8 P. h
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<9 `4 t' | T' M: y" y9 X3 L
cout<<"请输入发送数据比特序列:"<5 x8 d( {9 S+ b; T. b. w Checkout test;8 d8 n. T1 \ e- r3 p2 S; n
test.cxc();& e1 K8 g p( p7 P& E. j9 K
cout<<"余式比特序列是:";# t) x0 k8 y8 Z8 p/ e8 K
test.qyu();- p! D. q8 }1 m6 k, w" g2 c1 D) @+ X
test.add();
$ Q/ o" _# C7 F+ q cout<<"试试这次是否能被整除."<3 ~5 `! [. y! _1 E& U, M2 x cout<<"新余数是:";
, z+ F0 g; r3 \ K J6 W( [9 a9 p if(test.qyu())
8 N- ?/ U7 y: w# N cout<<"已发送成功!"<+ z/ T' \( y3 B+ c else. X! |/ ]- t0 s
cout<<"未发送,失败!"< M; W/ D( b2 M7 x# s} |
|