|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊( D% Z4 t7 @" z( L, ^; J( r( w
#include
7 G5 k# e+ Z0 |; c2 A' m#include
0 O1 p5 D# }$ t' P#include4 P) m" \( g2 r: T6 I
#define CRC 5- v @" w% }# I0 R! Y
char data[5]={'1','1','0','0','1'};! E3 R$ w: T. n7 s2 J% v
class Checkout
8 M% y8 N5 o- Q$ ]# I, P{
0 Q4 A; l! O+ m. qprivate: x( \1 _* ~3 k( P. t( t1 ~
char ax[50];
* [$ }* ~* \7 l3 S) w7 [$ ] char bx[4];- K0 q3 R1 E: z5 @; @* D
int x;0 R9 n- D# B" W4 S. ?0 \0 W
public:
* h9 c9 q! J8 g- h. E( | int length;2 }2 V) W, [: R1 m0 k3 N0 \
Checkout()# L5 H1 U5 [4 V. ~
{ 2 C8 B" s$ @6 v- U
cin>>ax;; a" b! z0 W! K
length=strlen(ax);+ t& ?7 p4 X% l( x
}# W7 D+ F' ^" B5 y2 H
void cxc();8 @; K* X8 H" E; h, t- [
bool qyu();
, E# J. {, C+ `; _6 Q void add();, w5 v8 g" N0 R( q
};! x. a# X3 |& y1 w( C5 I5 `! T! h
void Checkout::cxc()
4 }9 ~0 v5 n- ?{# f$ `9 u7 F' H V4 k
for(int i=0;i<4;i++){- M9 E, c: d/ a: h: y( B# c
ax[length+i]='0';, \ x B4 r5 N+ l2 e
}
" h) B C+ o9 i3 P8 ~2 ?# T( T}//将输入序列后加4个0
1 `2 R4 s4 s: m# g: n, V: l' ~bool Checkout::qyu()
" D7 w: n6 V$ H; ~{
, C. E( @4 t! I+ \& l% g char c[5];/ G7 m. T) { K4 ~" s" D( Q' E
int i,j,n;! v5 P+ ]) n- j: g/ V, I2 c
int m=5;# t' i1 m. W% d$ x$ p: h
for(i=0;ax<i>=='0';i++);" |7 N- X3 d# Y3 ]8 I
if(i==length)
5 L! c1 Y6 S, o d {cout<<"余式是0"<<endl;
7 n+ x9 M7 W, ^; j I# k5 e. { cout<<"发送成功"<<endl;3 U* O0 Z4 }8 ~ h0 t& h3 A
exit(0);3 F+ i& K" g0 z6 ]7 E$ C
}
' H* n& @3 Z5 H' ~% \' Nelse{& W' w2 J' o9 Q, ]- K3 v
for(i=0;i<5;i++)6 F' q! a9 u/ e7 f0 ^" E, n2 i
c<i>=ax<i>;
5 T$ i( N: ?7 W6 \' A# a7 F2 U while(m==CRC). T$ J' G- |& f4 ]' \7 T
{ for(j=0;j<CRC;j++)+ S o8 ^; j# L f g6 \' i1 a. C
{ / O0 Q* d. X/ K& v
if(c[j]==data[j])
( I( x" o; }# m c[j]='0';
' ^5 D( d, J4 w/ K! ~. r else
9 T5 F% w4 @" n! x c[j]='1';
Q, n' }& j8 ~ }; w# o; B/ D$ l' ~
for(j=0;c[j]=='0';j++);
( }1 y8 ?9 j( p" [0 l( M" j' H n=j;; ]# Y% Y' t' V! ~: C/ n7 e4 B
for(m=0;m<CRC-n;m++)* a {" Y; j/ Z
{
6 [* }& u& L# l% ?1 h8 U c[m]=c[j];, H3 g% s X! `& m0 K1 V. v
j++; `1 T: E6 s) T0 ?+ ^( p
}) a0 o- b, ^/ q. w2 ~0 p. l# }
while(i<length&&m<5)4 @6 s% ?4 ^( b
{
% A8 a/ P Y9 N) N% g c[m]=ax[i++]; ' j% _; U; |9 u- h- F4 F/ {
m++;
5 {3 Y. ?( ]- H- Z4 x }7 d9 ?' m! Z' h' D2 w4 h
}, [; W5 {+ @6 L* q1 k. s
}1 X! V* D. u/ C: Q' C8 M- v' N
int k;
% K- k' U& H X* ?: g2 O! Y for(k=0;k<m;k++)
. t- N. h1 q8 | bx[k]=c[k];
- s0 s3 B s$ W" W* O5 X for(j=0;bx[j]=='0';j++);
2 S3 d& [) R8 A7 K6 H if(j==m)7 d/ P% E! Q5 `6 z3 h# g
{cout<<'0'<<endl;
+ n3 u6 p+ t9 _; m2 Z x=0;
& S0 b9 Q* x* q% f: H6 ` return true;4 e( Y; z6 Z4 @
}) N* O( v- k) o
else, H" H, T4 _& s0 j5 R, @+ k- k
{for(n=j;n<m;n++). d$ n$ A z( X6 G1 V
cout<<bx[n];% ` \$ F0 p1 C v% R. `% i- i
x=m-j;1 @/ E3 m5 z: Z
cout<<endl;( ~) C$ X" e7 d. h5 u! K
return false;
3 }( m1 k+ d3 b. v$ V0 C5 W5 d }# G; T8 f: i4 I' x. L
}
9 h: S0 Y6 A" m: ?# Nvoid Checkout::add()' P7 ~7 l" }+ o+ c0 Y* ]
{& y6 a, U8 r2 @- O
int j=0;! w! i. E$ I$ y6 _" e0 B/ A! n
for(int i=length-x;i<length;i++)
! r7 X; @ V2 L) z" D ax<i>=bx[j++];
4 v# L1 M* h# i. t& h- { cout<<"发送的序列加上余数后变成:";
% W8 i4 e4 g5 }6 e for(i=0;i<length;i++)
; Z/ S T6 _7 @+ t* K0 ]/ F0 _. q cout<<ax<i>;5 U* q4 J$ m9 a3 W9 f K8 Z
cout<<endl;
7 j: \ y- L+ @9 T" `9 s! w}
/ @6 O, Q; H: k2 Q0 m2 N O! nvoid main()& \1 c$ Y$ S& s+ A- ?7 n5 S) |1 s
{
4 e4 d+ K" O7 n9 d cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
\2 p$ ]6 a% D2 x: v5 @. d cout<<"请输入发送数据比特序列:"<<endl;+ b) Q& U3 m; ~$ s; m: v
Checkout test;
+ J, \' T, I; r D# W, i( v test.cxc();
: R* u* O" i6 S- x' P# r cout<<"余式比特序列是:";
1 H7 ?& f5 V. ?* z( H/ @8 g# t test.qyu();
5 E* _0 x" K& ?- s- Z. ` a# U8 g1 Y' t- d test.add();- |8 _9 e& P) ]. V O1 E2 A& z
cout<<"试试这次是否能被整除."<<endl;
1 R7 @& I2 O2 y7 l; a6 C cout<<"新余数是:";
- d/ j" a' ^, R, m! s if(test.qyu())" C5 j& \1 z4 ^6 l. d
cout<<"已发送成功!"<<endl;
; {5 w D. z# v, O else
8 ^6 x: a) |- I2 O- g/ z/ D cout<<"未发送,失败!"<<endl;$ o1 S4 p: @7 ~2 V0 n& S) X
} |
|