该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊& ^ M2 M! m7 u! o. s+ a
#include
6 \& C0 a! \5 K; W: b8 G: q#include
3 r6 K4 ?: Z4 k, ~6 J#include( H$ a+ D3 D1 k# t: @2 _
#define CRC 50 b( J9 V8 ?0 a+ T6 Z l
char data[5]={'1','1','0','0','1'};: o' S7 m/ p; \* A7 D# R
class Checkout
* l0 X3 |+ b% E" M# s; s" J{
4 T0 {9 s) p- r% I9 K! `5 K" uprivate:6 X) M8 t$ i9 @- t" w2 z! T8 k
char ax[50];
+ @2 S1 ?3 R" H1 u8 A! L( a char bx[4];3 V. Q" w6 @4 e3 t4 W+ k( W. l& C
int x;2 w) B* Q( ]. [; M2 x) L- ^
public:
) S7 h0 x' w; I7 X1 {2 J6 p8 S p5 K int length;
/ ^: K0 A' Q2 [ P Checkout()# @9 k' K4 w6 v H; V6 F
{
" Y e. F7 _ W7 e cin>>ax;3 ~: {1 f" z$ V& ?% U- h( o4 _
length=strlen(ax);7 n) p* q" w; y& l+ d$ J
}
4 |& B6 O8 o$ o; W5 A* H void cxc();/ y& f) h! T' O6 ]& l6 k. x. h- J
bool qyu();( X! }7 g* A$ L8 I* @6 Q
void add();
6 Q" W( v# a7 E% u1 {& y};1 r/ ~4 K1 N: F% J! k' r8 R
void Checkout::cxc()2 } A. I- Y- G5 g) B
{
! `4 Y( ]1 J0 M% H7 q3 Q for(int i=0;i<4;i++){
* _* t3 b: V) p2 n S! | ax[length+i]='0';
9 z( f- [( c6 n! a! {6 r6 P2 P }
/ [* R) e- t: E# F}//将输入序列后加4个0
( U0 W5 a% _1 b2 jbool Checkout::qyu()8 H7 W5 b, T! v; ?4 X/ y
{6 w5 F3 ^+ G8 ?+ O; y' X
char c[5];+ S, c8 L. e' g) `+ `# A
int i,j,n;4 z9 p4 ^+ L9 l5 A1 q8 L" i
int m=5;. _# t: B" ? L8 y
for(i=0;ax<i>=='0';i++);
3 z0 X/ J( c4 Z if(i==length)3 I# n- m# V! y
{cout<<"余式是0"<<endl;
: N V a6 ~' p% B9 a2 `/ h cout<<"发送成功"<<endl;% ~: f6 @: K6 G5 o K
exit(0);
. n3 L; N. r e }
) d; Q; v5 u& N& celse{9 h" j5 @9 a8 ]0 t/ w
for(i=0;i<5;i++)( J8 i) i# m$ `4 G: Z
c<i>=ax<i>; d3 p, l& n" C' c% _
while(m==CRC)
6 ~ M+ v3 t) }5 E2 N { for(j=0;j<CRC;j++)2 ?9 M6 K; o5 t& ]0 F* Z
{ ( k. C5 M9 _ X! e' b2 c4 a5 l) P9 g% g
if(c[j]==data[j])
. B) ~* |. A% y4 P9 X% U& E6 } c[j]='0';
P) Z$ ~' w J9 g6 a8 t& S else5 _* @1 i' b" }8 O0 Q l
c[j]='1';/ M, U$ U6 Z9 B! o% {3 t1 H. L1 P
}
4 H2 z' Y% [+ }1 r for(j=0;c[j]=='0';j++);5 ]2 S+ k0 @1 h7 m2 c. q- t9 X- S
n=j;7 G I) P4 h) H5 f
for(m=0;m<CRC-n;m++)
& I0 v9 f+ B* |3 j/ [3 ` {
; Q" f, L5 s$ D) J c[m]=c[j];
: b" `5 ~9 a- G7 o( r3 H j++;( D" s( G. Q9 R% T! h3 m7 w% q
}
3 Z! g$ e: Y- V while(i<length&&m<5)2 u% M( W4 o0 k/ v
{( @* W7 X; W' R( q$ c
c[m]=ax[i++]; 1 Z& l1 Q& \4 b6 @# Y
m++; - B/ e5 w$ l0 ^7 N0 Z! J! G4 X
}
7 i; T8 \( T9 w- R; _& `! u }
3 ]8 K& q, K) V% n# u}
; [0 v5 y6 W/ T int k;+ d: v3 x+ S$ x0 H/ m( E1 A% |+ B
for(k=0;k<m;k++): S, s- Z& R% o. [3 F& v5 V, v' U
bx[k]=c[k];
1 f9 B; d8 Q, C, Q6 o for(j=0;bx[j]=='0';j++);
( G& Z, f% E! m% j0 A; z5 P0 ~ if(j==m)
7 ~8 B/ f; _/ y2 D {cout<<'0'<<endl;
. ~: O3 l+ G+ U* _- y: p7 e x=0;
2 ]2 ?. v, ^; R. ~+ [" b return true;
, d% N4 V; P- T8 v }
0 L1 M! ]0 j% |. [ else) B& U& |8 `) z
{for(n=j;n<m;n++): A; B9 P3 x2 d7 j
cout<<bx[n];
1 C: n# A5 [* V, C+ T+ J) x x=m-j;0 O! c1 Q9 z. p/ ~. T% c
cout<<endl;$ B( M8 q$ O& O/ J4 j; L
return false;
/ y* v& v8 `4 O. ~8 ]1 M }
0 t" `0 Q# V9 z$ b( j0 Q}
" d$ f4 J& h2 X3 Uvoid Checkout::add()
8 b) T- `" b3 l& { V1 @, x{
5 r6 e# S# t/ m% Q2 V% Z) ^int j=0;
* B. d! G0 Q! `9 K n" _, c i0 Z for(int i=length-x;i<length;i++)4 H& u/ n0 ]8 ?8 ?6 S
ax<i>=bx[j++];$ p* F/ u, J/ I9 {, R+ x
cout<<"发送的序列加上余数后变成:";
! _4 Q, y; ]' S7 d- g for(i=0;i<length;i++)% z" a! N. b6 O& {+ N( N$ h0 m1 f
cout<<ax<i>;6 z C5 J) M5 F: V
cout<<endl;
4 x- V5 }$ D1 b8 @5 A. z8 w/ h}
+ X$ H; k1 n0 v' |, o% ]void main()6 @! k" T# ?- I3 e: C, D. }
{
8 g' {) D" k2 f7 @ cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
: B4 c7 h7 `- a) q2 E4 J- m- M7 { cout<<"请输入发送数据比特序列:"<<endl;8 M4 l, j, v/ N$ b" Q5 y: e
Checkout test;! t; _* W( r' E% V
test.cxc();
+ o! J9 ?1 Q2 [/ D4 P/ e1 j& D cout<<"余式比特序列是:";, Y. i" [. [/ i) l3 E
test.qyu();
, a1 S. O: W r) Z) O test.add();' d7 `- Q* @* S! h$ H
cout<<"试试这次是否能被整除."<<endl;2 o7 B& e9 [; q& d* W
cout<<"新余数是:";% i. A8 Q0 d- | K) C
if(test.qyu())3 ?- }- N- T, C& A/ B
cout<<"已发送成功!"<<endl;
3 S9 i+ @0 s2 |* Q else
. [. u6 d/ Q# c0 b cout<<"未发送,失败!"<<endl;
' A: W9 W% A0 s; {} |
|