该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
3 C& Y& `2 x+ X( [1 K% W#include
) e H3 k6 |9 D1 z1 k# p#include
* L; h% ]9 p) F2 r) q#include. p9 n& u& a4 F. X! d* _
#define CRC 5
/ d+ e: P, q1 ]char data[5]={'1','1','0','0','1'};
) c. L+ T: n5 gclass Checkout
& [# I+ s6 `/ l; |% [" ^" k{
1 @" g* N& ?( o7 I oprivate:) T4 J' U+ K* W8 S3 c
char ax[50];
, [' b) k6 [& o+ a+ \# Z/ n1 ] char bx[4];3 F$ e" ]# T1 K
int x;! T( |. |! j$ {4 P) o8 n* m$ o
public:
* k7 O' y c" {+ C' i int length;: n: l* t+ H% N6 l) Z
Checkout()' X. x: g2 Z/ G* j+ l* x
{ 5 G- a) h4 V; h
cin>>ax;" s+ `7 r6 I5 Q. `
length=strlen(ax);8 n5 X1 y! c0 ^4 n
}
/ ]' `5 `9 x1 G7 N* Q0 ? void cxc();
8 c. y5 Z/ z/ }: r9 g( ]6 j bool qyu();
1 V8 ?, o; ^1 s0 {5 ~) c8 u! e void add();. |1 K* A( s7 f" f8 g9 R
};
: N# Q; V) U7 jvoid Checkout::cxc()" U; ?, @) W3 x8 a
{
* S1 F3 n8 G# }4 }2 l for(int i=0;i<4;i++){1 V5 b( O/ u0 p3 i! E; W% M, _- j
ax[length+i]='0';
( C7 r, o0 F. `2 e* G6 c# I }
5 s+ b; [9 g6 |- f8 V! {6 G, |# b}//将输入序列后加4个0
' p4 Q& @4 F/ U+ e" Mbool Checkout::qyu()
@" l5 U' `% n$ J" T+ b ?# d{& O) F7 b% @% F' c7 P l2 f! X
char c[5];
! e+ G( p: k. O6 T5 s int i,j,n;
6 Z/ B$ R/ ?5 `* b, t/ C1 b2 G1 ? int m=5;
- `* p" [: Z- B$ |. I( Y+ ]5 E for(i=0;ax<i>=='0';i++);
o( q8 E! L1 A) k6 R, |7 q9 D if(i==length)
9 S4 W! B% T. E9 z. [6 q1 D1 P {cout<<"余式是0"<<endl;
; a @) X. [% K7 i5 [ cout<<"发送成功"<<endl;
8 o4 t( \1 q. O+ k0 j exit(0);/ S% X: |5 v% q) K
}
' N/ s: V7 H/ o, ?. W" B+ Felse{
5 z% o. g2 ~7 V5 J" D2 {! y! t# S for(i=0;i<5;i++)
L9 {3 y3 }% S1 @/ V2 J* ^ c<i>=ax<i>;2 r! ]- w2 j4 i0 l/ x. B0 Y
while(m==CRC)
0 R' J9 n) s* m5 r { for(j=0;j<CRC;j++)
6 `- r4 r" |, G1 }8 B1 u { , B6 s1 h3 Y/ N; K& n. x
if(c[j]==data[j])
3 W+ r. M/ y# |4 T6 N; F% `4 f c[j]='0';5 U$ B1 o" c* b# Y! P
else
9 Y Z5 V m. E4 g3 w+ g8 A- g$ i c[j]='1';
7 B! z: z8 P$ ^4 f' ]& K3 A) Z0 Y1 y }
( Y3 e |$ I1 s+ h" f* |1 s for(j=0;c[j]=='0';j++);1 u3 |, L/ g% A4 s" N7 P" A# k0 U/ R
n=j;
0 J+ g, c# v# K3 R9 B/ X for(m=0;m<CRC-n;m++)
5 Q* [) F& \. o c v! q {
/ _, y8 P+ z1 e1 N% }: [ c[m]=c[j]; h3 V! D& }5 L" n. k ^
j++;
* y( x7 G6 \8 W3 r# Z/ E7 b$ F: ? }
7 M$ q! M# v" _" |$ d" ^5 z while(i<length&&m<5)$ b I. p( c& ~* A/ Z
{
- s O. Q# s5 q. ?, }9 A3 ^7 ` c[m]=ax[i++]; 7 ?( I7 k# d. p: f! }4 M
m++; 7 e7 {( [4 i1 ?1 a
}7 q8 I8 w* D( Y2 f
}
" k e' v: x+ v}
2 y2 k* Q( ]3 ^0 k4 ~0 o5 P6 B int k;
( c( `1 |9 |/ K' M for(k=0;k<m;k++)
: w6 [# W: s+ U bx[k]=c[k];
5 W% a- j$ z2 {# ]- u2 Z7 v$ ~! E$ E for(j=0;bx[j]=='0';j++);
v! F; O. O6 B/ L2 I+ r3 ^3 g* {; ^, w if(j==m)
; N$ x# \. Z4 U$ g, ]* m+ ^ {cout<<'0'<<endl;
* C2 ^0 j1 {1 N% O3 t. R. I x=0;
( ?2 _; \! m8 f4 a2 ]% S return true;$ V& ]# u- {1 s; A
}# A* q, a! Q- F) W4 l
else; Z1 q6 p0 G3 y1 D1 j0 v- l- v
{for(n=j;n<m;n++)
+ T1 R$ c4 m& ?" v, w cout<<bx[n];$ e; o* u0 y% ~0 `9 C* [/ l
x=m-j;
1 s3 M0 {5 r6 d; o4 f2 r cout<<endl;
9 X) s( B: p: T- X return false;8 M, u, q4 B: s: ?
}
: t% A( ?6 L% }4 Y7 L3 E4 I6 }}: O8 m, }. x# D$ m* {$ ^
void Checkout::add()
' t$ {$ I( L7 e2 V{8 Z( M( S! R# d& ^
int j=0;
3 l N* G. r w' k for(int i=length-x;i<length;i++)
' f! ]: |4 x) C8 X |3 ~/ V ax<i>=bx[j++];
5 ~7 F9 C8 x$ Y" F cout<<"发送的序列加上余数后变成:";5 \0 ~/ E3 o; G1 }; K8 y5 ^
for(i=0;i<length;i++)
! @8 z5 m% \, R9 ?7 c w cout<<ax<i>;
$ \/ ?6 F- B [& J9 G, c" p cout<<endl;6 L9 @' }6 m, E3 r. R! P) s8 x- W, t; }0 O
}1 G( a; Q. T: f7 k3 q+ u$ U
void main()2 i( n; I7 u/ D* e( ^7 p; v+ V
{ ; L3 g' v. h+ A9 D
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; $ L$ y' V# I; Q6 L: t
cout<<"请输入发送数据比特序列:"<<endl;) |& A" f3 I( q+ T2 _0 e2 }
Checkout test;0 B) `; d! g4 r- R/ T. P( q: H5 T
test.cxc();
8 R7 h8 V5 U( W, N- x& y. M cout<<"余式比特序列是:";
/ X& o2 I3 v; O% j% p% g2 C% ? test.qyu();/ A% L8 [1 I/ e- a, P5 ^/ _1 \
test.add();5 C9 A9 X% N- Y) w
cout<<"试试这次是否能被整除."<<endl;
) P% }; }# a' @ cout<<"新余数是:";
: ^! R6 w0 m! {/ X! i, R if(test.qyu())
& M+ t! ]( I3 }5 v cout<<"已发送成功!"<<endl;
2 J5 C" G7 s' b' M else
3 [; d. W% L3 `4 H) a- T6 O cout<<"未发送,失败!"<<endl;
* A- p' J" @9 w! c} |
|