|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用
' N, n0 n. i1 W7 |: `" v- F4 I#include
4 _8 t. Q7 y( K% h7 f& D3 s( _#include
6 ]. z' m: Y! S( M) n#include
G" n$ y- Y; W$ L#define CRC 5) G0 t0 q, L' l* ]5 v
char data[5]={'1','1','0','0','1'};
' ~$ c& N; E) t9 d7 Hclass Checkout
0 _- C7 c8 O7 m{
( X- m+ e6 f; T5 Kprivate:0 }# `( l0 q7 U: H9 n
char ax[50];' ~# `1 Z* _# H3 J; R
char bx[4];+ |3 w/ q7 E0 R9 Z
int x;
$ J/ R- K: S9 ^) \3 _public:
8 o$ M) d6 ] @: C9 ]# H6 A int length;
( F0 b7 v7 X9 |4 G Checkout(); P& F4 T9 w. |9 |/ W+ n: W4 J" E5 N
{
; f% f( L' C2 I, `; c( K cin>>ax;
4 E9 D# [1 U, P length=strlen(ax);
; ]/ O7 T/ H! r6 S* M' b% L, p }- Y( ?( L$ l) K( J0 m
void cxc();
9 x- t, s6 {/ Q0 a7 { bool qyu();9 \: l+ ]! T- }9 [. T
void add();0 i) n( A4 [0 | d
};. ^ `' }+ y- A. d" k
void Checkout::cxc()' r# o+ g+ C7 C4 y
{
( J3 z8 x* t/ T2 {5 D# n/ n1 O for(int i=0;i<4;i++){
9 z) y& e+ C' U( ?( l ax[length+i]='0';
$ X/ `' D! G3 ]: M% I }
* d" r) D. |2 I, _* v: `}//将输入序列后加4个0, n- P1 f6 E3 w. r9 a! @ l# h, o" i. ^
bool Checkout::qyu()
# B% M/ {+ z8 A5 [" L{
2 H7 ]+ }5 ]) I; @. x char c[5];/ I. W9 u9 T0 t
int i,j,n;
' m9 b2 o8 W) u/ r int m=5;, ~: I3 z5 m |% l
for(i=0;ax=='0';i++);
+ y; Z/ \. ~3 A# H if(i==length)6 X# w6 K# `; \6 D
{cout<<"余式是0"<4 Z" {4 @$ [' y" ^/ l
cout<<"发送成功"</ o9 m& u" Y8 B. G1 p$ v( [. k
exit(0);- E* C: `9 b) c6 I- K& i Q
}; r: n1 B" P7 u8 t( d6 K9 H
else{
# X3 I6 l A ] V4 _ for(i=0;i<5;i++)
; n. Y5 K/ T8 U8 I7 g K; d c=ax;
! |, t4 z9 o: ] q while(m==CRC)
1 ^) u" }# Z7 q& H A { for(j=0;j0 u& j3 b" C( T1 D4 T* f {
/ C9 O' D& U F5 T if(c[j]==data[j]). n# V4 V8 ]/ L0 ~! k
c[j]='0';
5 @6 b4 i% t( o+ g else
& \4 P. H& ?- D c[j]='1';
& E0 B' F3 G2 B. G. C8 C, j3 \ }- B5 D. S2 T/ ^% F1 b
for(j=0;c[j]=='0';j++);. P n6 x* W2 |' S3 E) a( A; z4 K
n=j;
) _& Z) a- F* P8 y for(m=0;m/ O" n) B/ V( d! v1 e: ?# T {# h& n8 N. Y/ S! V* _
c[m]=c[j];
3 G! V; S: K. P0 i2 s. | j++;
7 h" ^1 ^/ l# U4 A( i }% W6 |% r: |; }
while(i9 n' \& j/ O# A/ [5 | U" ?8 G
{: K" ~ |2 [9 t; `3 k! b, f
c[m]=ax[i++]; ; E# k- h- w* n8 `% p
m++; + m: M5 E$ r; v3 [+ z$ r/ D
}0 m3 {/ H7 V& e' ^, S
}5 A) i: T, {2 |& w
}) V, B8 F6 L) Q* O7 i
int k;
, w0 a% d8 Y4 k; R; B. w$ a for(k=0;k1 u1 K: G6 U, J bx[k]=c[k];8 n4 x9 t0 W9 E# b
for(j=0;bx[j]=='0';j++);- E# n; {" s, @5 Y' T0 c3 f1 i
if(j==m), z! `: R y Y
{cout<<'0'<' j7 M$ d2 |" D6 f* G3 i2 b# l x=0;
/ l ?2 p! h! b3 s. M% y* [ return true;
7 z1 L; X y1 J% T( H W }
0 y. k4 G% k5 {5 W else. R7 m3 c* C8 s: O6 [# l6 R
{for(n=j;n4 D* Z$ P. k, [, b8 d2 L) h# m cout<& ^' v- p" R6 E% g& V) u% E
x=m-j;5 C* k5 l* O5 [( Y) ]+ e" S: v0 F
cout<* x7 z4 ?" f( n7 \- G- j& q return false;
+ k/ L9 F+ n) H( [ }
% x3 j: R% f1 H7 u5 l}' Y# K, x) j7 ]; q' o \: j! G# E
void Checkout::add()
. ?- m/ o' Z; l. u{
7 ~ {5 H$ f& v2 C# y% jint j=0;
& a& e. T2 Z/ z& C( f2 E/ \( ] for(int i=length-x;i1 v5 r! p) ^( F- n7 Z ax=bx[j++];
; x2 L8 a( f* A6 }7 D+ [4 v cout<<"发送的序列加上余数后变成:";
% N* h/ R/ i7 }# D for(i=0;i) t" d, N2 u+ [, T cout<;
7 t/ B" h9 D; a1 p" [5 E cout< P ?- z, `; t _! E8 X}' K- {. H3 b. g4 m0 ~
void main()0 y) N1 v" A/ P
{
' u7 Y5 k- {7 k u cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<" F% `) v* |2 b& s4 b cout<<"请输入发送数据比特序列:"<' J8 m$ D1 H8 F
Checkout test;
% Z R3 t& h4 k: K+ O" \! _+ [ test.cxc();
* K# c4 X4 C+ a6 {- J' V s$ n cout<<"余式比特序列是:";" E( x# t' ?- T, V/ M
test.qyu();
3 I( W/ D. t* K% L6 Q! l test.add();
+ T* c$ n' _. K0 n* P0 A8 { cout<<"试试这次是否能被整除."<2 ~( g; A( B( L" \ j
cout<<"新余数是:";
. p. s8 @) N; s% p if(test.qyu())
M( j/ J, C0 w& u# u* ?; \ cout<<"已发送成功!"<$ F0 m: V) q" _6 ?3 L' `$ ~
else, I9 K; J& P, Q r) R7 E
cout<<"未发送,失败!"<7 J/ V# t6 V! }* @
} |
|