|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用7 B3 N" |/ {1 x' W& V9 S, p Q
#include
) l% c: D z/ @$ e! P6 ~#include
7 G3 \& P% F* K! H. K' v#include
3 n, y- f/ G7 y0 k+ S4 D#define CRC 5
, W% |5 G3 T$ J$ w, r( l! x5 lchar data[5]={'1','1','0','0','1'};
9 t& `" F% {% M9 w, I) A# Qclass Checkout6 P! g, P; C7 P. i7 j, v
{
& F- [( J# }! ? pprivate:
6 t, s; Y% R- r% W# R0 s char ax[50];+ \. d4 a0 u0 P! K
char bx[4];
2 ~: b. w" D0 Q' p9 K int x;
6 s+ R/ C. A# N- `/ qpublic:8 t( L t; _! W: A: L1 p1 B3 U) Y
int length;
" ~+ N8 ~3 ^7 y Checkout()7 N- M) t5 F. d1 b3 X* |
{ " W6 Z2 q5 @ H' L
cin>>ax;0 o t4 ?- {/ I Z
length=strlen(ax);# f: _" \9 ?0 ]! m, m+ [. A$ e9 f9 H
}
% i' N5 F0 U/ _7 a* b/ O3 X: j void cxc();# I( l8 U3 C& l2 R$ r
bool qyu();
/ l& [% u( ^9 g, Y" s6 D$ |/ V, H3 R void add();
" |- y) C+ G3 I6 T% [ K};
( V4 t2 m6 G+ cvoid Checkout::cxc()
: z' r) {% ?; N2 j2 P* v+ z{$ k* S) X3 t" k L
for(int i=0;i<4;i++){
& x+ d H6 l2 u6 i) _2 E ax[length+i]='0';
9 s5 _. `, |6 |4 s) g, Q }3 g6 ?2 k }% z! c' J
}//将输入序列后加4个05 G% J+ E. p( K3 V- a
bool Checkout::qyu()) C% Z# E0 \3 h$ M( n. t
{3 ^# s/ V( q8 n4 x' @# a
char c[5];
+ @9 y' F/ S7 c) D8 \; D int i,j,n;
* \) e2 N% d! K! }+ g1 y int m=5; {0 U4 _% x7 ?" u
for(i=0;ax=='0';i++);# K9 s8 O3 _! z0 Q1 t9 \
if(i==length)2 m' r' w+ N( I/ g
{cout<<"余式是0"<; _& \ x* E! r, V cout<<"发送成功"<; r2 j3 D5 S% _' h3 M exit(0);
9 Q4 J& C F! g7 O6 }: N4 C }
) D1 i- L0 z7 |else{
# m D+ p4 K1 g4 F7 a for(i=0;i<5;i++), |. g" s$ k$ P& @# G' N2 v
c=ax;' }. w$ v2 m+ N. u2 r
while(m==CRC)7 P* M8 i. A# B7 z6 `7 h# C
{ for(j=0;j" h; ~5 Q+ E4 ?6 r7 Z {
: ?6 P" E9 m) h0 ^ if(c[j]==data[j])
! L+ m: X5 S" x$ i c[j]='0';- ]! ]$ p6 m" l
else
, ~. n: x4 _7 j/ I: B c[j]='1';% \2 F) t) M# P) h
}2 R; F6 S2 V x$ w/ H
for(j=0;c[j]=='0';j++);, r! ]4 O& {& w$ l- }" K' ?1 E' J& w
n=j;& s! W9 r% z1 H( Z* t; H1 f; q
for(m=0;m, G5 ?0 T* v/ A {# R4 D5 s! A) ~, j. l) N" i2 t
c[m]=c[j];
& G5 M/ T+ D5 b* i3 N ^0 d j++;. z; {4 ], ~. u* s* m
}- J+ h1 U7 x6 h( Q* n2 v
while(i& o) N+ L: f: ~$ ]" U4 _1 {, S4 t( o {
& R; }" P) U, @- `: {- Z! f c[m]=ax[i++]; 3 K4 L( x" a9 ^; r0 X/ i9 N
m++; 6 I) g: _* V \. W
}
" _; r: l5 T1 `+ t }+ e3 g \/ h$ |% F: C( m. `& i
}2 U. u7 n! Y& u; b3 \; L) L
int k;
4 T6 Q: g+ e7 e7 O1 B* x/ _. a7 y for(k=0;k$ e5 T' P% A5 Y$ T/ ~9 L* a2 ]
bx[k]=c[k];
! z' p( ^6 O/ x& j$ B for(j=0;bx[j]=='0';j++);; g' a: B/ u$ u9 ^5 F5 m. c
if(j==m)
9 c: x' e3 O D) y3 P {cout<<'0'<& r% _: x7 Y! `$ Z- z x=0;
1 T+ Z, e3 W$ a2 T return true;
% \+ v0 u# }! s8 g+ _$ h# w$ } }
$ l( w% n- t: | else
9 [9 ~ v0 ]! ~: q {for(n=j;n3 g/ Q7 i: Y. B
cout<' G( `# N# Z' H" V% A3 ?8 ~9 b2 g x=m-j;
( S( Q3 s5 |8 T9 n* ? cout<* H6 u% I" `5 d" P% T! b return false;$ N, l' p4 A* c/ n$ ^7 e l
}# s ]' M6 F6 p. G
}
; P, E, h6 z& U8 Cvoid Checkout::add() L% z: A' s2 _/ _- l( X
{
; h7 ^/ f, a8 t Sint j=0;- F) {9 L k. s& D% k/ W
for(int i=length-x;i. {% B5 w! Q, [; ^" S( T- d
ax=bx[j++];4 M! }- n+ Q7 y# L) x8 [
cout<<"发送的序列加上余数后变成:";7 I+ O% S( n$ E) \
for(i=0;i U' ^+ m% U5 b1 T. E7 f cout<;8 Y6 e+ k9 i: K, }6 j: F
cout<5 J2 D" f$ X. X0 {}
$ J/ [- G% w5 b- ]* v- v- {void main()
' k: m! W8 S' z{ ' y( Q# P7 h2 P) C
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<( R! |# r9 V/ y# X5 T7 H( s& S cout<<"请输入发送数据比特序列:"<& H7 K: p8 G4 X( Q8 i3 H
Checkout test;
" X. ?: |! B" Y' | test.cxc();6 u8 a, P( |% @2 K9 @( j
cout<<"余式比特序列是:";- ?. p" _$ |2 u* y. f4 E3 A
test.qyu();
, l1 V z2 H$ o7 z8 |. e ^ test.add();; B* p6 b) ?& N
cout<<"试试这次是否能被整除."<: D3 p/ f4 e& R! ~1 h5 W; ? cout<<"新余数是:";
! F/ l, N5 |* A! @2 b l if(test.qyu())) X8 z" T6 C) `, K0 D
cout<<"已发送成功!"<- ?. Y( U6 p: E else& ? s1 K6 \& l1 c- R& D. [1 o
cout<<"未发送,失败!"<* V+ d; J3 a. m+ M, b/ I} |
|