|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
3 y% |5 ^" g5 K! ]" ]6 q0 z#include
7 W) p: Z0 E, e6 M#include* W/ b5 n0 N4 ` K$ V( I
#include8 m; J6 V/ ~' l- L. Y0 c
#define CRC 50 j( ?" ^5 D8 a' g) E) i: N O. D
char data[5]={'1','1','0','0','1'};
& J3 S u! @: k% a3 Rclass Checkout
- l* P, C( r2 x{
+ z, g: a% h# z1 r; ]5 mprivate:
6 c: V% z6 o- P( L$ T# z+ ` char ax[50];' }( [4 E' R- ^: h
char bx[4];& Z6 T) m# w. p2 f- z ]9 X/ q, Y
int x;
6 p4 `1 x0 G- Vpublic:
* `3 R$ r" ]+ @" S int length;) u( h, V9 R* ~; z# n' y
Checkout()
3 l, J/ {1 L3 @0 n( X/ Z% N9 B {
3 H. Y) f/ m2 c6 }& P cin>>ax;
& I/ H6 K, _7 m% @( `% x length=strlen(ax);$ j3 t+ t" X2 @5 K; V* V1 C3 d& A# A; z
}
# J# C6 `( M- e3 l: ]- O& K/ g void cxc();! r! z2 ^! \9 w9 Z- f! {4 ]
bool qyu();; k8 o1 W" t+ h! H; V7 V
void add();
8 d* u# P/ y# R9 R$ w' v3 F1 q};
7 f+ w% E+ n8 w* O6 I; C8 svoid Checkout::cxc()
, P3 E' J$ G" R: r9 [+ l{
) k4 B% \! b! z for(int i=0;i<4;i++){% j `8 p/ M3 g" h0 }# o: B% }1 {
ax[length+i]='0';. ~- `" V8 F, A5 m1 b# C
}
9 {$ L3 h R) w# {, @3 i}//将输入序列后加4个0
& @0 n0 [8 ?3 [bool Checkout::qyu()
. T: T+ G- T% {7 Z8 X5 S. @- G{
) z4 b* b# g% ^4 Q) H+ Q& L3 Y char c[5];
( O2 U4 q" Y8 t int i,j,n;
$ Z1 u( w: T; m, W. n int m=5;% S8 Y- W, k4 n2 ?! D2 b
for(i=0;ax<i>=='0';i++);
! t, m; ?3 y$ E# Y, h2 a if(i==length)
" F3 k3 u( {6 `4 |7 R4 J- E+ U {cout<<"余式是0"<<endl; s: N6 j# l6 Y9 r
cout<<"发送成功"<<endl;
h% t7 M( D- C0 i/ C exit(0);! _& \6 X' w' W$ D; ^, t
}8 C3 \) s t3 U; _9 _
else{
, @( A( t5 U- `! ?: N1 Z* C4 t for(i=0;i<5;i++)' y& K: c# e) ?( B, ?" {; r' R
c<i>=ax<i>;6 M" h9 c% m. O1 \! F
while(m==CRC)
3 X- ]/ A/ A4 a7 v- ? { for(j=0;j<CRC;j++)
% ~) j( O% ^" J2 h- h# V" r' y {
+ h# u1 b, h: I4 B if(c[j]==data[j])1 |; Z. \; \ r+ i: P8 W
c[j]='0';
$ \- r* v r; v5 B2 S8 ^ else+ ^; B# d' @' f. q( t3 V
c[j]='1';
9 ?* L2 h% c" S7 o }
$ F( J7 Y5 i* \6 W( ^ for(j=0;c[j]=='0';j++);
6 q4 L% Z: i7 X; n1 f: t n=j;" {+ X$ X: p9 s5 u% k
for(m=0;m<CRC-n;m++)) W. {& B2 ~' @( i& N; s4 V/ [
{
# k* K$ O- m; n& ?( [ c[m]=c[j];; B# `7 _& y- S( a
j++;( c7 }4 Y+ V: B: Z
}
! K2 E) g1 b3 ]- X while(i<length&&m<5)$ ]' m% v& O2 r1 J+ U
{7 Q7 g e7 A, P8 }
c[m]=ax[i++]; 3 |# j) D' k2 M4 g/ H
m++;
! W. D V+ w( H# B0 b# b }
0 `; K% Y# M' ^5 [ }4 X# s9 b0 r8 Y7 ^9 G# o
}; X& y" W+ ?3 Y! ?
int k;$ W$ E& Y9 x, A( Z( g
for(k=0;k<m;k++)8 C: }/ m! `( {
bx[k]=c[k];8 P* M& E7 H9 q
for(j=0;bx[j]=='0';j++);! B- p( B2 w* p' i1 T( c& ]$ ]
if(j==m)
0 @9 @$ {, W# l q, W {cout<<'0'<<endl;
) b" Y4 O1 _6 h) V+ [- ? x=0;
/ a& e7 n( m+ N7 u4 T& i' ?! c return true;6 E: k) K& o+ ~) ^' G; Z6 L/ c/ y
}# w( x6 @, U# C' b1 L% T# g6 O, q
else+ J! E! B: r( x
{for(n=j;n<m;n++), \; G+ p7 G6 v! R' Z, \; j
cout<<bx[n];9 x" z: l/ @+ t9 i. ~1 l
x=m-j;
. O( C- I0 W* ?# ^4 }- s7 R cout<<endl;9 I3 b4 c6 z7 }) S; z5 c
return false;
1 ~/ ^3 w' b! P2 w* X# H }, R9 c; O" {4 m
}: N; K7 D* y: I9 y0 h: _/ O
void Checkout::add()7 T! ]. W0 c, w/ U( y
{4 R% b# o' U a
int j=0;+ I; L) C8 z% O% P$ }
for(int i=length-x;i<length;i++)* z$ C) I+ V2 t
ax<i>=bx[j++];( ]% O6 }) ~7 c6 u8 u
cout<<"发送的序列加上余数后变成:";
- a1 Q9 [2 h; A1 C for(i=0;i<length;i++)
2 b) P1 ^6 s8 \( a; D+ c2 A cout<<ax<i>;
* q! m O, ?7 V A! \ cout<<endl;7 j4 A, j8 l! j+ M' k! h
}
' G3 {+ J% ?; A' r! Bvoid main()# ?( N6 k7 z* ~
{ * f( S* v) b( t& Z" ~$ B1 N
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; ( N$ i( f3 g( M5 T/ L; a
cout<<"请输入发送数据比特序列:"<<endl;+ [$ o5 p" Y' ?0 x- ~
Checkout test;9 r7 ^2 A. U/ E
test.cxc();; t$ c5 E- ^. r# _( d3 ^
cout<<"余式比特序列是:";
0 n4 c% `' }8 m4 Q( v6 P# y test.qyu();: ~- [$ p. k, h8 J
test.add();
3 p3 R) l3 F3 i6 C) Z cout<<"试试这次是否能被整除."<<endl;; u! }' ~ ~8 D5 I
cout<<"新余数是:";% g) D9 ~, n5 @+ I" R
if(test.qyu())
5 p& Q w8 c1 f4 m9 a0 `$ a; Y cout<<"已发送成功!"<<endl;# i4 |( |4 ^* H+ }- n2 }5 U
else
5 G; ^- d6 e8 r% k, U# Q5 `& ` cout<<"未发送,失败!"<<endl;( @% a* n' @: c) w" B
} |
|