该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
n: [8 a; P9 q4 c3 Z8 e' [: g#include3 t5 \% r3 Z$ A: ]4 X- }' O* a9 Z. q
#include
: U$ O" D3 U$ I0 Q: b#include
" N1 ]/ C4 W- C/ f0 g- C% g7 m0 \9 q( G#define CRC 51 B2 m. s) T+ C
char data[5]={'1','1','0','0','1'};$ }, f% k Z5 P2 U* B# u ~7 E$ f! `# u
class Checkout
6 n4 j; T7 V I) U% \# v7 B{
# d" ?$ X0 A e1 g* V; ]8 D1 t2 yprivate:$ l" x% @4 f+ A
char ax[50];
. r# a/ f* c8 O; F9 j! i+ v8 ~3 J char bx[4];
6 w8 g) F& W+ k9 i" G int x;
% ~# q; ?+ p# B7 |) jpublic:
5 Z' l" |2 G9 f5 v) J int length;
9 m+ l/ P# r6 {8 u0 a Checkout()
& R- b: i8 I0 x# L) P* A9 g {
4 e& A. |4 Z# g; s2 Y cin>>ax;
; A% t3 Z' L! r( P3 ~- D" K length=strlen(ax);
9 ^. l7 V A8 N }6 S1 E8 u# o9 Y6 G5 L7 G) D& X. ~
void cxc();
. b- y) v* H( d% h% w" ^ bool qyu();, g( y7 s, @' G# ?
void add();' f4 ?- F9 Q( G9 L; K
};4 C2 E, H# J% f4 B5 W4 G
void Checkout::cxc()0 D g: h& g: |( v8 {
{- \' N P2 B! `. b/ H+ p9 w
for(int i=0;i<4;i++){. r) E$ k0 y! y: D
ax[length+i]='0';9 J/ C& m0 z# P6 Y0 H" m5 e
}- K; S$ O$ T3 {( n: c% S
}//将输入序列后加4个0" d+ m* D D, u/ L: [! u
bool Checkout::qyu()
5 z2 |# r4 E+ }- j{
) ~. x0 h$ p( {3 ?) Q char c[5];
7 v3 j& \. E* D! ]4 m int i,j,n;# c; @9 N$ z$ D7 o
int m=5;
& c: E6 |$ }7 s9 r5 v for(i=0;ax<i>=='0';i++);
" f* o: y9 {" V8 C% q2 H if(i==length)) \/ H) B" v' Y: q
{cout<<"余式是0"<<endl;0 o$ q" Y+ i. s& Q. g
cout<<"发送成功"<<endl;3 E a2 w; e5 v; K9 y t
exit(0);3 w) a0 Q& }& [0 t3 V5 c
}: k! b3 N0 A1 W; v3 z5 t$ q
else{, L( P2 Z8 Z4 X( y( a
for(i=0;i<5;i++)
. r/ L. i% q" _! M0 S) e' J- B c<i>=ax<i>;; X+ }# j, T; n" ^+ l( M+ Q' c
while(m==CRC)8 n: V5 B0 v" [% u0 P; f Q
{ for(j=0;j<CRC;j++)
+ b/ L; i6 p* t& z, o6 P# A' ], S% d3 b { . D9 U. s) o1 ^7 F4 R
if(c[j]==data[j])0 T/ U( h+ a% d9 y
c[j]='0';
! ^' j& q! j$ Z8 W; M7 ~5 u, C else; O+ w+ A; A( A0 p$ u$ M
c[j]='1';
% B7 B( {. d& }* _, x r }
. }' E& e C% D# }; { for(j=0;c[j]=='0';j++);" b! q$ L- M/ w5 E; d. ~( m9 z
n=j;1 V) J7 _! V" z! y- J- s T
for(m=0;m<CRC-n;m++)
; n$ B# B# A* P$ {( b {
+ x' g! T( s* e. ] S) w8 B c[m]=c[j];0 l# ?0 t" S& }1 c& R4 F' P
j++;
% L, G: Q$ V8 s0 {4 ~ }
! g: p E) L6 P7 h while(i<length&&m<5)
" D! c& {6 P' ]+ v1 H/ n {
4 U- i9 w3 H M4 N c[m]=ax[i++];
) _/ P" N( |: w0 B5 J7 n @3 P' e m++;
$ g4 @, b: K F8 J% f }
7 C, y/ t0 m6 O" j9 k5 v- L& k }9 }/ I" d5 X5 e# I# t
}/ l# a3 E0 Q% j; e" }& I
int k;! U, L6 t7 i' a; y! O
for(k=0;k<m;k++)
: L( } } m" Z2 G$ y( V( ^' n( _9 I bx[k]=c[k];6 B( z! }$ Z0 l& e1 ~
for(j=0;bx[j]=='0';j++);) a$ E7 N0 C/ l3 t
if(j==m)* y, e* u; n" H5 a! D
{cout<<'0'<<endl;
. s6 y- l. n( d' P [ x=0;
J7 V8 i& ~" r return true;
0 o& \/ c6 _0 d" K: \ }
6 h0 Z) T1 ~( w w else
; F ] l" h x, D) b4 w {for(n=j;n<m;n++)
- m" l2 |$ S3 i7 M9 O3 C4 U( [ cout<<bx[n]; }5 o1 V1 j8 e( l$ N; M+ Q
x=m-j;
+ X2 Q0 y. t0 g6 O- Y cout<<endl;
3 F7 F. M- i1 R! |6 n: x return false;
2 i I1 Z* q' {3 j. H2 O3 c } n& `$ {- y" t0 S: S( N
}5 @. K$ X/ g9 K% K
void Checkout::add()
* M2 y- T; P* q% j% [/ v0 }! O{+ a/ ~5 X" d+ H- V5 ]7 S
int j=0;' t- N7 k' R/ B4 Q+ T. \
for(int i=length-x;i<length;i++) H- ~, E3 T7 k" Q7 _
ax<i>=bx[j++];: o! A# J7 S% {
cout<<"发送的序列加上余数后变成:";( }# P9 M! c$ j
for(i=0;i<length;i++). ]9 K$ f* b# D5 {
cout<<ax<i>;6 ^+ F3 W1 n8 C3 ~- _/ B h
cout<<endl;
/ d2 L1 i E' b* H" \2 f}% w' l. \2 E$ ]4 H$ ?& y. ~! [
void main()2 ^2 V. C& Q% \8 R' h% T+ t3 Q8 o' [) Q
{
& x0 ^ s" e, r1 e: K' {- Y cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
5 c6 \& \8 Y. I. q# L+ h cout<<"请输入发送数据比特序列:"<<endl;; q$ o$ j) G! r+ W7 ?% t1 L( r3 ?$ x2 G
Checkout test;
1 T- N6 ^- p# j" k* A4 _8 M test.cxc();% }5 s' e" m4 X( `
cout<<"余式比特序列是:";0 m- V. o# b" ~1 @* B3 ]- k8 P- Z
test.qyu(); g% u# \* h7 A
test.add();- c* U$ O/ [7 F6 ]
cout<<"试试这次是否能被整除."<<endl;
8 Q" V' a$ w8 t- y8 N; C: _9 T: z cout<<"新余数是:";
9 {' t) P/ T' L5 U8 G* N/ t' K' b$ s if(test.qyu())
6 K0 q8 ^: d/ { cout<<"已发送成功!"<<endl;
: S5 b2 H# ^' c2 @ else
1 d# A6 Q7 n! B; r7 j cout<<"未发送,失败!"<<endl;- k; B5 P2 ~5 {. j# v+ }% H' X
} |
|