|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用( m) X; {3 g; X& c t5 L
#include! ] n3 Z$ }" v$ f, @
#include
3 h2 k6 _; Z( O0 H8 \2 D+ v#include
0 C! p% {. H9 _& g#define CRC 5, Y9 l# }- W7 X1 }
char data[5]={'1','1','0','0','1'};: p1 T) Y- \: w B8 w
class Checkout4 o- H [( W/ {2 q$ A7 J3 U, p
{
4 P' J T- X7 T8 P7 c ?private:
5 f, O+ n2 _# w- ^: h# X0 w/ [8 ~4 D char ax[50];% @; j3 V% {0 J# u% Q
char bx[4];! P* K3 J/ l# w$ Y# b# o/ @0 }
int x;- b3 g; t5 Y- T: p+ v1 d+ ?
public:
# V6 g2 u9 Y, T6 | R+ Z$ m, C0 ] int length;
$ s1 G- G' o5 X* c Checkout()7 ]' y( G( E$ ]
{
0 _* v9 n% J7 N5 W cin>>ax;+ a/ Q) h" Q% m6 n
length=strlen(ax);4 r3 L) s6 a* g V0 R! H
}) B9 Z( G" h3 W' Y
void cxc();
4 r& h% Y6 P- H3 _ j5 j/ { bool qyu();
( k6 [( c; i9 @( H$ x/ `1 C7 y void add();) X& c. _$ U* U$ A$ l- r
};
0 e7 |6 x! ?" P$ M9 o6 H8 l @void Checkout::cxc()
7 B" A1 H1 S& z1 n{# I1 W+ J! _4 | h" Y& \
for(int i=0;i<4;i++){
# V9 _% s% g5 `& a' w7 w b, b ax[length+i]='0';
2 L; r* I. A" e* a! b" @7 [& W }! G) p) b/ Y) A' i6 |
}//将输入序列后加4个0, F8 U0 j9 L8 a# m
bool Checkout::qyu()/ N. h& O+ ]; n+ j4 O5 z
{& x( H; q1 e2 a( W% X
char c[5];
( b/ o S6 a/ H- ^ int i,j,n;
A* X# s e) f1 n int m=5;6 `5 x! X9 U$ r1 @1 ]
for(i=0;ax=='0';i++);. x& ?, W1 ]4 C8 X
if(i==length)2 U( D4 L, S7 Y7 l! x
{cout<<"余式是0"<9 P* F+ v9 `6 m% } cout<<"发送成功"<# x+ n# E5 g4 R, F exit(0);' O' f2 j2 ?) z% y
}
; K1 [) z) {/ t9 lelse{: V& a! J) a' v0 |3 s8 Q- G' F
for(i=0;i<5;i++)8 j! E4 c. V1 {6 |' ^
c=ax;, e$ y Y% w. ^9 [5 S2 ~ D2 C: ?
while(m==CRC)) a2 j8 K5 ?" R
{ for(j=0;j2 U4 R! n$ ]( |! Z9 J
{
: V9 K& K7 ]6 s1 c4 | if(c[j]==data[j]), i! I2 ^9 k8 d: L
c[j]='0';
7 s6 o5 A& ]4 o8 a1 O else
8 M7 g( a. @+ D! X+ O c[j]='1';
8 y) @* |9 d4 A$ c. ^ }. ]2 ~3 g" e6 p) V4 S: n, g, i, Z4 T
for(j=0;c[j]=='0';j++);- g+ c# y. p4 z; s# ^1 w/ D
n=j;, d/ A2 b: v+ t& Q
for(m=0;m/ x: X( R% r; r/ d4 ~. M, C' Y) ` {1 ]5 z4 T1 _) G% O' A( Z8 z7 N
c[m]=c[j];
: z5 A6 i" w5 a6 y1 Q j++;
b7 C# x& x" I- ~, t8 D }( D( A, e; a5 F' k* T$ m
while(i" J6 j" o2 D/ ^% T; t7 y {/ D1 c' L- u) W4 t2 j
c[m]=ax[i++];
- f( b2 Z/ l+ Z, ]+ I m++; 2 m2 v+ i. l) }# Q1 Q. C! G) R4 f
}+ G6 n2 K& n. }4 X
}# ^/ f+ Q7 R0 ]9 J, ]
}
8 R1 e) n7 L5 u$ q9 u int k;# \2 J# H5 x7 ?% V: ]1 h6 T: w c
for(k=0;k! s' ]2 O; y8 Y& T bx[k]=c[k];4 C5 M# l0 k- i' w$ a2 A
for(j=0;bx[j]=='0';j++);/ O( L) k( U p/ X
if(j==m)! x5 k' B& a" j. Y g8 v, {
{cout<<'0'<& A0 U# @( _, E7 u: y' Y x=0;
. U% D& `. I& K. d5 m& N: i6 Z return true;
J. v% v! I/ }. S" _& a2 i6 C1 z }
" e2 k& u8 S1 H, W else0 o% P- M( Q6 d1 f9 j# C. ^
{for(n=j;n9 Q/ z+ X6 E# U* Q' m! H
cout<* ^$ _0 V' B7 B8 @
x=m-j;
; Q6 W3 C1 m' i0 ?( J/ ?' K cout<4 R# o! [+ B+ D" C return false;$ Z6 m; U, h( }- @9 }6 J8 {9 y/ ~7 ?
}
! `* L9 `5 P3 H8 E$ V}
: S% A5 M' x# @2 k. M$ |void Checkout::add()
. `/ J1 N' k/ o" q: C. m# H0 D{* i: u! f1 q9 s! m! S9 ?
int j=0;5 B" ?& |; E* M5 w; Z, T) E2 h1 ~, u; n
for(int i=length-x;i1 m- M$ k: o; b4 N5 e1 h6 ] ax=bx[j++];
* E0 ?6 t0 D' V6 V+ L cout<<"发送的序列加上余数后变成:";
/ O$ d: p# N7 _ for(i=0;i6 I( f0 D; \7 O9 J: | cout<;3 H2 Z) m: \* |* d1 r; o
cout<) f% u) D/ S# Z% N
}
6 \+ F3 w; i8 Tvoid main()0 f4 T2 V* T5 E* c+ a
{
' r3 L& L. S) S9 ~1 y) H0 E8 t cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<& c% X% M7 R& a% t8 a/ ^3 w" O cout<<"请输入发送数据比特序列:"<! a6 a. P& C! O! I a
Checkout test;
g/ S5 @0 F/ s) b i% G6 v& x test.cxc();
: K5 X) A* y+ H$ q, Z: ?% W4 _1 X cout<<"余式比特序列是:";
4 m, d8 H6 [( K test.qyu();
+ L( |2 ?+ ?' r) [1 ^! R test.add();: [5 L! s3 {4 ]
cout<<"试试这次是否能被整除."<) }9 Z* W) d3 R4 I
cout<<"新余数是:";
E* r% o# {8 k) T9 r! h if(test.qyu())
& a' \% D" A6 K$ K cout<<"已发送成功!"<; d6 {! M2 ], P6 P. {
else
4 L2 D5 Q& N4 X+ F" y cout<<"未发送,失败!"<, I! w; h1 @2 c. K( M) _1 i
} |
|