|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用8 S& Y6 D- ]# ~. n
#include2 L4 n" z) a9 t+ m; w
#include
' d) ]/ [, Z/ a; {0 S#include
& s$ A* u; M' }; |/ g: n9 s& r#define CRC 5 X- W, S2 Q" W( e) k
char data[5]={'1','1','0','0','1'};* z: U2 r* y- y" `. O) z6 [7 y/ d
class Checkout! X, Y2 W/ L8 E c" Y
{3 e4 F5 f* q8 l6 U3 g3 [8 e* O
private:
5 [2 J' Z; I7 o- z' B* S# H char ax[50];
2 V- |/ r9 B+ O- k, G. v5 Z char bx[4];! a$ m# @# ?, S( Y- M
int x;
8 X [2 l) y$ ~+ Bpublic:! g0 U- X& j T3 o7 K" b( O
int length;
" ` S$ T1 p% m8 Q1 A Checkout()
; m2 U: O% G) G- P4 h { " Y9 I! w" c5 X( V( ~
cin>>ax;/ U8 V% [& o6 O$ w! a
length=strlen(ax);8 j: a) `$ T+ K2 h. z) q
}
& M/ z2 F0 Q, j' L void cxc();9 w0 M$ R' r9 C' a W3 a8 d a
bool qyu();
- L) A) J1 `/ }! S void add();& ~9 a9 g6 J" d) `
};. }6 C# X; S k: l' K2 _
void Checkout::cxc()
7 e: u( D% B6 `, }; a{
4 t6 R$ L1 {2 p( S9 ~- \ ]# R# w for(int i=0;i<4;i++){
2 I* m8 @% `/ ]1 n ax[length+i]='0';6 Q/ q _- @* I k6 {0 e) o
}
% ~* ]! r5 @- I& j3 y0 J9 i0 L1 k}//将输入序列后加4个0. _6 R- \: V! d- P: |7 X# ~8 K
bool Checkout::qyu()
/ O# y: z' o% z, d{8 Q7 P s6 g$ f: c% q* Z
char c[5];) j& Y: i) s$ P( W0 [+ w/ h
int i,j,n;0 F) m' c! s% H; K8 N3 l3 b0 a
int m=5;$ R: l5 z+ }) ^" ~6 r! v
for(i=0;ax=='0';i++);+ k& R9 E. S8 v0 m) n
if(i==length)1 M9 s( V4 V" S
{cout<<"余式是0"<0 ^' H% v* v) ]* Z$ k" z2 {7 t
cout<<"发送成功"<! R3 c$ V8 O: I7 e" ]' t
exit(0);
- Q; I7 l8 o8 B; e2 j' N }5 c B! \" A( j" G9 p
else{. }4 A7 Q. F; P9 P
for(i=0;i<5;i++)8 P3 x% D) b2 X$ n: u: Y# i
c=ax;8 v5 X) F& |* d& l. P* A
while(m==CRC)* [$ @' u3 I* b8 u" p: r) U1 w0 s
{ for(j=0;j( n7 H& i% \8 T4 B% e
{
6 ]! i y b. a2 m8 u; r% [ if(c[j]==data[j])' S% h$ [% X! v% j
c[j]='0';
5 h% ?4 F0 P+ n8 S else
% b0 T$ s# E" `3 R/ w4 D c[j]='1';6 ?8 K( ~7 d( k
}9 J3 [) z8 z1 P) w
for(j=0;c[j]=='0';j++); I) R/ W% R7 _% G8 ?
n=j;9 g8 O* W. n& \$ X% l
for(m=0;m3 A1 @2 p* \. x. C( u {
1 x$ k& f: p: b' S( k' C. Q8 `; E c[m]=c[j];* K5 b# W5 f2 u/ W
j++;
: t" N! y @" C( S" s4 _# A }' o) n9 Q; g7 C3 O& B
while(i) f5 S8 X @1 s# S4 y* f1 _1 T: {
{2 D3 {! E- o+ j( U9 D
c[m]=ax[i++];
# ^1 |4 [8 ~9 ?" y m++; % \ i: Z! o9 a# [/ m$ w
}# H9 D3 l, E; ?
}6 l. q9 _0 ?1 K/ z& N) ^
}; }$ C+ M" r$ }3 {: T N+ M* F
int k;( S) X3 ]$ G: `
for(k=0;k8 N5 n% b! V) B$ [8 y" i! v
bx[k]=c[k];
, F8 o6 Z5 Q; E5 A for(j=0;bx[j]=='0';j++);
$ ]% j1 q1 q. t4 D( q( ^ if(j==m)- G& o. n# O0 p: _* `
{cout<<'0'< o, g: v/ p4 ^7 i) I
x=0;& V' T# r7 u. r8 S: O8 S8 s
return true;
1 g* E& K' {+ j6 _' S' n0 c }
/ B- b/ q& M( _, L( a$ b else, e( Z# w7 [" o8 P% x$ g# ^0 s
{for(n=j;n; M3 j$ c6 S) N* D4 c# x6 g cout<6 w4 K( y r+ q, b$ M. U
x=m-j;
" O" \7 K0 L8 x( x7 ^ cout</ f c4 L: l# K+ C
return false;
, s5 i, b( b% o; s }
' e7 n, ?, ~/ x% s6 N) o}6 ^7 B/ Z7 z9 g! Y9 a! p0 u
void Checkout::add()* u% k4 E/ _" N8 ]% g: Z+ S( c
{
- Z$ Y- B7 H2 |' z$ j# O! \' |int j=0;
* R7 B* K8 Q K0 h8 R c for(int i=length-x;i* d2 m8 ~+ L$ }, \7 \% K6 A" u- c ax=bx[j++];5 g' z+ `# l% ~' p
cout<<"发送的序列加上余数后变成:";) T5 Z2 D2 T4 a4 n. A; E! f
for(i=0;i. Z; p6 m$ y* C cout<;3 G1 F# |# }& A1 W5 h& ?4 H0 N- U
cout<" x% o2 y/ s. n- C( |9 }5 c}8 z3 d O, k, x; ^0 L( M% L
void main()
$ Q+ G6 G5 B3 z{ ' w: H" u$ B5 s3 p' C, s
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<1 Q( c4 \* T$ Z
cout<<"请输入发送数据比特序列:"<( b% g7 {3 L( i6 r3 f+ b
Checkout test;( c" K* i9 _/ i* d0 g4 g
test.cxc();' i/ D. J. P8 {* N# e+ E; \
cout<<"余式比特序列是:";
9 I2 N* i' z2 p; r& I! K) {3 h test.qyu();! n1 f3 Z- y& o& \
test.add();
+ M5 i* A' L' m, Y cout<<"试试这次是否能被整除."<% [- c" L" M e- P, F9 H$ @, K( E cout<<"新余数是:";
6 i9 t0 a o8 x! X6 X if(test.qyu()). g1 x$ a% \! h# j; h1 h7 V! E
cout<<"已发送成功!"<, d5 {# x' G1 j# s% v else( ~% `5 {2 [: ~5 Z+ j
cout<<"未发送,失败!"<# G* d* m- I- x7 Q} |
|