该用户从未签到
|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用, \% i! k, p. G% h
#include
; d7 B/ H4 L" T& a# ]+ X#include( [. ^( O( }; x" F
#include
1 }; K* t+ c( h& O( K `#define CRC 5/ k/ P B/ X k1 S9 {2 J; k
char data[5]={'1','1','0','0','1'};
5 Y! O5 I( Q/ Rclass Checkout
* }$ q* Y/ z9 J8 }5 c9 I{
- F1 R6 f! Y- u' l7 l3 V! gprivate:, q J& K h' Q3 P5 j/ k2 {
char ax[50];( D, Q/ q4 ^# G# l! H; K9 C2 h; J3 P
char bx[4];2 r1 m5 b- g+ }8 q# O
int x;
5 b- P" ~( j6 k5 o2 }7 bpublic:
4 s+ A# E( t) ]- X1 y c( b9 n; Q1 \8 U int length;+ u) X1 f( K+ n: M) r0 z2 p& i$ s& V
Checkout()
1 ]1 j3 B9 E9 a { 7 \: @4 W6 G4 s$ a5 _; X
cin>>ax;
' N o9 y% T* I% p e5 O length=strlen(ax);
# H/ r9 R9 a& h: f h }" p( t8 t9 Q' r5 Y8 g
void cxc();5 E$ M, i% X2 C3 W% s2 r
bool qyu();
+ B) u" m8 T/ @9 { J1 [% F0 L$ f void add();" Q6 J" Q* H6 [6 U1 V$ T" x6 f
};
3 P8 j- m- D0 r/ B+ Mvoid Checkout::cxc(). I3 X) _5 J u: o. A
{
+ ]% r! V: t# Q8 i( X! l# N for(int i=0;i<4;i++){
& _) J: q* [& T$ m ax[length+i]='0';
" W' d) N1 G2 E" Q5 M8 Y' [7 a0 G }( d/ O1 c' W. D6 f
}//将输入序列后加4个0
/ |- ]5 g, V9 s0 c7 ^5 x- T4 P$ ?bool Checkout::qyu() N5 d$ Z& l( x& N; e/ k
{4 p/ f0 `$ c$ C: r( w# Y
char c[5];
) K5 p/ P8 _& q6 Z3 i, k# A int i,j,n;' d# u% c5 t& X1 @/ N1 `7 X
int m=5;
- W$ g8 N$ R- v1 R/ ?0 ]% b for(i=0;ax=='0';i++);! Q1 v0 G& p& b1 V- B
if(i==length)
$ \# S1 `: U4 y0 c9 u. b: l8 L {cout<<"余式是0"<! @7 O0 b+ u. {9 q
cout<<"发送成功"<9 a* T6 r/ h$ V8 q: N; i* O( e6 C exit(0);6 J) ]: x y1 M" S9 r; F
} j; }( c; y0 ^9 p& h" |0 K; d
else{
- S) ^) j, o5 }" m for(i=0;i<5;i++), j. H; G7 s; _3 x
c=ax;/ h* z( _3 @: q7 b+ v; ?
while(m==CRC)6 f6 \8 ^, h' L" g9 m
{ for(j=0;j3 ?! [) ~7 E- V. o" U: d. b
{ 1 R1 B7 v: ^9 M9 y8 t. Q
if(c[j]==data[j])* w* y# Q: Q1 t2 V: ^) c
c[j]='0';
! S: w; {+ g& L& W5 M else
0 M) @$ L# E) }2 ~" x7 h5 X c[j]='1';8 c# R( C; H; o* `
}
6 D) V* \4 Q! P- g7 L$ L for(j=0;c[j]=='0';j++);
+ d+ ]& x5 d4 H# y$ y n=j;
6 a. h; D o, ~* e5 |2 v3 L% [ for(m=0;m1 R1 O/ ^. M! j6 B* c
{
, ^/ k5 n1 u! _0 o9 T9 M7 U c[m]=c[j];0 M) O$ ^( u! {8 |
j++;
! O( w+ L4 g4 {2 E% @ }; m* Q& m+ ^/ x i5 X! d
while(i3 [# Y5 R0 Y/ n5 n {4 ?" Y- h. |' C S& O u7 B" l
c[m]=ax[i++]; 5 D" E+ n7 |; O3 P" {
m++;
4 y4 s% C& j+ c }
8 s. r- J3 L% E4 H9 M }
+ T2 ~5 `% o/ r7 P' b}* w5 _* Q/ ^; B/ N/ x
int k;
5 I" B! T5 d$ ]/ H for(k=0;k! v7 L& g* g3 Q& \
bx[k]=c[k];
\9 c9 o) q, L% `# C* j9 a for(j=0;bx[j]=='0';j++);
' J& [9 J, q+ M2 q6 S# | if(j==m)
" e1 y2 n; ~% v/ \7 V {cout<<'0'<6 n; C; D" S1 ]+ ?' O/ c
x=0;2 U! c. ]3 O# P8 L, F
return true;$ L: l3 d7 _1 c Y! E7 x$ p
}
' G& V/ I/ t2 d0 ^1 `* q# C1 _1 ~+ I6 b else
( W1 d- r7 h8 u, A {for(n=j;n) A+ a1 Z. r, E8 a5 H$ _# h z: X cout<5 @% `3 `) ~; V& a x=m-j;
, }1 ^; u7 H, I: ?; t/ t' K cout< d9 S6 s1 A8 x: l* O return false;
$ E8 L* N' x* Z$ j& o1 V# I }
+ _6 k; d: X: E' { `2 @( q}( [, C6 p j. B! v
void Checkout::add()
! Y& b- |0 s6 W3 F2 `{2 C# E) } N" Y2 W
int j=0;, @# b& z0 q2 `/ G% q$ [
for(int i=length-x;i$ C% j. U8 I: u; h: Z6 ? ax=bx[j++];2 n) x! b; L: m& j% b
cout<<"发送的序列加上余数后变成:";
9 B* ^' a9 G U( l for(i=0;i- I. t# Y i) j8 ^ cout<;
0 ~4 y$ c e3 v cout<: n1 D9 x# r" B8 T
}
' O+ g" t* r! I% w) g/ {. |7 cvoid main()4 i$ `$ _) p' [# K, z; P
{
) X( a+ r' D1 _' W" u2 E! C cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<& {5 \5 A' J5 s, w% R. m cout<<"请输入发送数据比特序列:"<' z5 d. }# `- e5 o; m- t
Checkout test;
& X8 |! o3 A8 t5 z. p6 b test.cxc();
. m5 ]5 W! |' { cout<<"余式比特序列是:";. {9 K; m. n& g0 N
test.qyu();+ W, E4 @) f; a5 @+ M7 d
test.add();
p; p0 e# ^2 ~6 y) u; _# T3 h6 c4 ^- S cout<<"试试这次是否能被整除."<( X3 k% C' |. U) x, Q# s# W cout<<"新余数是:";3 y5 Y6 [9 G# Z5 A5 Z) m
if(test.qyu())" q& s1 p! S! p& b$ {+ R
cout<<"已发送成功!"<) X) p& [9 {) W: R, H# }. R else' g- M; x" K$ q5 b
cout<<"未发送,失败!"<7 n9 o+ t+ ?: v
} |
|