|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊) z8 Z+ g0 g, D/ M4 ?$ o
#include% S$ G: q) m V4 w! ] T7 ~4 a9 h6 r
#include
' j: ~6 u! l+ K3 z) l#include" J: {8 L% j8 D: V! n" A
#define CRC 5, R b2 X! f. f
char data[5]={'1','1','0','0','1'};
+ V, |! s t. r* F0 T W3 v3 O$ S9 s9 jclass Checkout+ u# L4 {1 h; c
{
1 c0 X1 ~" B5 Q. `3 Qprivate:
# j, V: O$ f m char ax[50];* O3 h/ z, G: ~6 C( Q/ l* F* f
char bx[4];
- }/ i( U& k$ w1 Y; u int x;
+ k: P) c! H7 l+ e8 k; C2 h, c/ opublic:7 Y. r. A7 v7 T
int length;/ u- R- G( O$ o2 w& S
Checkout()4 S+ N0 g+ c7 X+ ?4 T# d
{
% o0 U# {% L6 |2 Q7 b# }# W& I cin>>ax;
4 D4 V; M S$ H2 F9 |9 I length=strlen(ax);
" g' m% c3 ^# S- ]8 F& E }
+ b7 I& T& I. G @! O' D void cxc();4 ]3 C* `$ R) h* H
bool qyu();
( e* c- c# l% K* x5 E! N/ {+ f void add();
, W7 L9 K# }+ {2 z+ k0 x};8 Y' \! v+ p; J# B/ c
void Checkout::cxc()
% {+ P! ~0 l2 p* X{
& X1 Y3 c7 v6 Z7 X& m# B' p% o for(int i=0;i<4;i++){
: k9 u) E0 M6 i) O7 W4 u6 g ax[length+i]='0';8 A* Z* v; l3 o* T
} s* P2 n6 {5 b: Z S# y/ N, n
}//将输入序列后加4个0! I: M" r6 B. [
bool Checkout::qyu(). W% a9 e p/ C/ F
{. _- T% J/ p! b% v/ t
char c[5];2 H& }; {/ a5 n" b
int i,j,n;( m: x& P+ Q5 \4 P6 Z
int m=5;) ?7 a8 Q% y! _4 f3 ?* b
for(i=0;ax<i>=='0';i++);
$ G4 E B6 a$ g# e if(i==length)2 Y' l9 A P' z& O
{cout<<"余式是0"<<endl;' A0 G& c" U: g1 q z$ M
cout<<"发送成功"<<endl;2 B* ` X: E0 m9 ~
exit(0);
+ Q2 b: ]2 |% l }/ w' s0 A- k2 A9 [9 ~9 X# p
else{
( k* h3 g. f, F; { M for(i=0;i<5;i++)
% i3 q9 Z4 {9 r3 T c<i>=ax<i>;% y6 x% I2 P0 z; c
while(m==CRC); z4 A3 C. l0 ~1 l
{ for(j=0;j<CRC;j++)) S2 y% u" s7 w, W9 x
{ " V: W: ~" o( c# h- A `) F/ V% W
if(c[j]==data[j])" i/ N8 w0 B u+ Z( E4 ]
c[j]='0';. U; N, O! O: E
else
9 Q- T, y0 p2 T/ y- k c[j]='1';: w6 \ ]3 A5 V$ z$ g y* ]; w
}
1 s7 Z. u5 o+ v for(j=0;c[j]=='0';j++);" j6 M' V, r* B- u8 T& j4 C
n=j;5 [ N) }: n! X- M0 R+ J
for(m=0;m<CRC-n;m++)- l3 o# q: ~( |& d3 Z- x8 W- s* H
{& C3 U- C* C! P/ X* I# _* x
c[m]=c[j];
9 y/ s0 X i% c. p6 x& z/ b j++;% J" J6 _5 E. |! P
}' q5 n: S' c+ g7 D4 S
while(i<length&&m<5)
; p9 O5 G/ r) D3 r" P {/ R( ]5 t! I0 l! b1 {
c[m]=ax[i++];
: T+ i+ Q7 L" q! D- P) \7 ? m++; ( ^0 D2 Q( x$ T8 ]) h
}! U7 v" _7 @5 s$ \8 [
}2 Y2 T/ R7 ]' o! d% z
}
0 o4 c: L. f! Q: n int k;5 ]9 j) ?: j0 K0 Y# ]' w
for(k=0;k<m;k++)# N7 b/ H: w: J2 C) Z5 D
bx[k]=c[k];$ R7 @# ?1 a- _* S+ G+ l
for(j=0;bx[j]=='0';j++);! W6 _$ h q4 ?5 H9 q2 W7 y
if(j==m)
( i/ P B4 y+ _) x, N) I {cout<<'0'<<endl;
: Y4 @) F8 j0 \8 Z5 u, u3 f2 o5 B x=0;3 z& W+ ^0 E) H
return true;
* [' l5 e# ?" \ }
8 f8 v2 ^4 H. o- ]7 R else
. Y3 Z, a5 X( P9 h/ w3 s7 Q/ y {for(n=j;n<m;n++) A5 R# A& M0 i2 \4 ]3 f
cout<<bx[n];
7 R+ U C9 q8 y& m' m x=m-j;
% T3 j- N; p a cout<<endl;. }) s% j) W3 L
return false;* Z& [8 v. R) b; l' N. F, X
}
0 U9 o0 Q3 q D; k}! m+ w. U5 P! g# _1 c% @3 E
void Checkout::add()
) v$ R9 z' \* k3 t @6 L& x{: Y) [; }* K. M3 |" W( L' o8 y( u2 g
int j=0;
: V; j; ]- f, ?1 X+ v- ?3 V for(int i=length-x;i<length;i++)' b. L' V5 s" |. p t% O/ Z6 h' ?
ax<i>=bx[j++];5 `- X# h) t0 _ i6 v. ]4 n* y2 j
cout<<"发送的序列加上余数后变成:";
( Y3 w" d) }3 w, F# ?! P for(i=0;i<length;i++)
, V- Z4 e3 O t7 H* S cout<<ax<i>;: y* U4 V5 i3 T! s& H
cout<<endl;/ |0 ^! K( H" Z) v
}- K$ H# Z4 P) g" u- N
void main()
% j" n1 Y/ ~1 e: g. s{
! Z5 B4 v% I3 u( H cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; 0 _7 Y t R; x, V2 w0 P3 J/ I1 E: ~ `3 Q
cout<<"请输入发送数据比特序列:"<<endl;0 X& w$ m! b* x3 U
Checkout test;
7 w) G* z; {8 T$ \ test.cxc();
. t& K ?/ O8 s6 m, f( K3 D cout<<"余式比特序列是:";, N$ M7 }: n4 r+ l S- u' P
test.qyu();! E+ _' m J, V5 w! g
test.add();
2 i0 T- Z1 s; g8 o* [ cout<<"试试这次是否能被整除."<<endl;
]0 [9 m6 R# x7 { cout<<"新余数是:";
( Q$ i( M! b2 k7 K3 E if(test.qyu())
! w+ E }& j% L2 n. R+ V cout<<"已发送成功!"<<endl;
, W1 V( \' Z" _! L8 Q1 o else
$ M) c' A+ T2 W( D: a& e& X4 h cout<<"未发送,失败!"<<endl;+ \. I( U2 ^2 V: X$ I- P
} |
|