该用户从未签到
|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
+ e5 h' i1 K. L# x2 a7 \#include
0 Q2 ^7 @* q& r, s#include7 O4 [; U+ `- g5 u, w
#include
! ?# p+ q$ `1 h! j a" A2 w#define CRC 5
! V9 i5 `% Q( Q$ c) A4 u; h2 _char data[5]={'1','1','0','0','1'};
& j8 g( R" Q- l% Fclass Checkout
) n# o% M8 q, `1 w5 D+ x5 d{" I Y W2 ` W5 _; m d
private:+ |, d1 K* ]$ O4 L6 q/ i
char ax[50];& `6 U- A1 ]* F$ c1 |
char bx[4];7 s7 I) h* d, S
int x;
/ s" D4 s. @" ]% H2 m+ c% c+ Bpublic:
0 h* P ?% @* w& R# i int length;2 `% R; y: d8 }( J% Z' j1 X
Checkout() `3 T1 `# P! y/ A( K6 y1 c
{
0 z. z5 z8 v7 C8 \) c0 h cin>>ax;: G% R& k' W" E& `
length=strlen(ax);+ t$ \3 C% O# Z6 V# d ?8 w* b
}% c3 \$ O) W+ @; U+ N5 [7 e
void cxc();
. H$ ~% {5 z' h+ b W! g9 p- g5 c5 a/ } bool qyu();2 v1 x0 I% t$ v& b8 ?
void add();5 |4 n3 i' a5 S6 y8 g& ]& y3 `( U8 g
};
7 d# _8 ~$ @" j$ P; U1 y4 evoid Checkout::cxc()0 H$ }: B% G- \! C
{ T- f' W4 ]/ m( ~$ L
for(int i=0;i<4;i++){
0 p7 V/ `0 h2 `$ [ ax[length+i]='0';$ j) o9 |# }5 j! z3 ^0 u
}4 G9 J; ?: f9 V3 [
}//将输入序列后加4个04 M8 |) j! {2 Q6 q
bool Checkout::qyu()
5 b# [5 Y, ?; b$ Y1 m4 z+ V# p3 R{+ L' m* R, q4 f# k5 j# X
char c[5];# D" ]2 Q6 S( v5 y* M/ W6 f
int i,j,n;
! f# ?1 ?3 C7 F: \: C/ U+ a1 Z) M int m=5;+ y, a/ t# E; {. W; P3 s! o- G
for(i=0;ax=='0';i++);) F0 l$ b3 M; b' K; {# _5 A, {+ e
if(i==length)" q' l( D: ]+ y+ p
{cout<<"余式是0"<3 o |; d$ `$ N2 p# R
cout<<"发送成功"<9 J6 w8 L# |3 m# r& t
exit(0);3 I) D: ^; W7 V6 I$ u# Y( v! \
}# @1 B4 Y( l' Z, g* B$ |4 B) U
else{
+ r* ^. Y) d1 a for(i=0;i<5;i++)
( V- U: e9 y* V: @8 d9 M: e c=ax;
; z `- n& r5 \+ R0 R while(m==CRC)
3 i1 Y% U' k: T$ X { for(j=0;j0 ~; J& I0 @% A! L) S5 `: X
{
: Y: {1 Q3 _( i, X if(c[j]==data[j])
c/ s: o) D0 V' _9 ~- {3 {' I+ f c[j]='0';
+ j$ x7 v* J- P2 `9 I8 R else( p! _% u K! l+ O6 E+ S
c[j]='1';
( C3 U4 e2 A2 N2 X4 U7 a }
) i) f) k) k8 E3 a0 v for(j=0;c[j]=='0';j++);
" i$ `2 T T& E' [+ v0 w n=j;
|# B* m7 n6 V3 g4 I( ^+ X for(m=0;m# A/ D) ?! E) s) n# f0 j {
# z0 Y# p1 l) Q2 V c[m]=c[j];
$ i* T. x; L6 l8 A3 f) g j++;) R% d4 f- y) S: S1 t' S; O6 L$ B
}: x7 R! Z4 C N! {) i
while(i h% u* w1 ]) _2 O& x- ~
{8 q, w8 D3 b( f" h5 `2 ]9 O0 D
c[m]=ax[i++];
4 o8 D u2 ]* P7 \, m2 U m++; ?+ m8 p' i$ q1 I# j6 L6 [$ z+ e+ Q
}
$ ~$ s7 J7 g6 }0 L; R' R }
( H" e" s1 n" \7 H}- i8 S8 @: `# v( O
int k;
- f( U$ @( s [) s/ s* c6 B for(k=0;k; k; L+ u2 \! G/ B8 M bx[k]=c[k];
, `3 J8 t+ O! P3 E# L( m( r: C for(j=0;bx[j]=='0';j++);
/ \7 k1 A5 m7 B9 _2 V; b9 J1 I if(j==m)# [! B5 U! o+ S9 g$ f0 r0 Y8 @
{cout<<'0'<# p9 p; F' L/ y! v8 t9 B# B N7 S8 M4 e x=0;
. h1 f& R2 @5 T/ v" x return true;
2 o# X r5 e( h9 z- w/ f }" ]5 G. K4 S, h" C+ m$ y
else, Q4 s5 S( p2 v) T# D
{for(n=j;n: p% p2 w9 F/ \% e1 Z9 w; K- j cout<# V- `# U2 K6 ]' Q
x=m-j;3 {$ E" d, H, x8 b
cout<+ U0 s- k" C9 L! H return false;
4 @4 a* V; \8 f# O0 x# \5 f( c }2 t: C/ x8 s. y7 c% N& `
}* I' D; N$ H2 V6 \
void Checkout::add()
: ~9 j8 x6 `& \5 b3 U{
- s( a: G# \" E, S& ^6 [int j=0;) b3 t7 K3 r5 m0 R* ~: e0 y7 u, d
for(int i=length-x;i" l5 i% L. J: D: ~ ax=bx[j++];
) ^ H" F! Z8 J& \7 ^ cout<<"发送的序列加上余数后变成:";+ @" @$ U4 A. p- n
for(i=0;i8 D+ A1 S& v* Q K6 N
cout<;
& [% u0 P6 j7 z0 X# B cout<* U5 z6 m+ J( T8 d6 C6 m}
* V! U {9 ]/ l: y0 [1 R Hvoid main(): ~0 `; O( K* B- g3 Q7 ~7 K9 n
{ / t2 N- e: t% v# H: z7 `- U
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<4 b# q( o- T# X( D
cout<<"请输入发送数据比特序列:"<! l* q1 x; O* h9 r; ^, L* P
Checkout test;
8 N7 d6 u" K @) Z+ E test.cxc();
/ z, t3 [! ^! P6 y# q cout<<"余式比特序列是:";
: [! \2 f% z; `2 D6 U test.qyu();
2 }7 e* ^* Q# W& H5 J- U3 F test.add();7 g& {: F& ^6 t% {
cout<<"试试这次是否能被整除."<' W4 f: H, j+ D& q0 k9 r, P. s6 s) }' x
cout<<"新余数是:";4 _0 n+ S2 C# o6 _* k6 g1 D! z
if(test.qyu())# u* r I- A( _9 o' |3 v2 V
cout<<"已发送成功!"<3 m& H' @& d: V) e6 Y% Y
else
( m" Q3 u8 c( v6 b! I cout<<"未发送,失败!"<% ?0 m0 N* _; o} |
|