|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊3 q* F6 x1 y; E
#include& v& S5 {0 n$ F% P, e* {
#include
) K& U+ j% i/ a; N( T8 [#include3 V P, o8 M8 N! \" ?
#define CRC 5
6 S+ ?0 R- `! y2 Hchar data[5]={'1','1','0','0','1'};
& r0 a, o. z8 v, j+ ~( }* o# Sclass Checkout( a1 y) P1 f% R/ }
{
9 V8 n' \$ u# {& |6 i' K" qprivate:/ B3 @. W/ t. h3 }6 d
char ax[50];
) V6 s3 N2 u% `6 v5 L) S! z char bx[4];
e4 P! w w$ A* O int x;% R7 O+ [4 O$ l( \
public:6 {2 a* R9 }+ @8 i' r6 j
int length;: X c7 Z5 d4 @* e: g" g
Checkout()! ]# x4 `; N5 E! x
{
$ }' W9 z/ q1 G( R. `" S* k1 u cin>>ax;- v# V% \- f* z' ?. j4 Z
length=strlen(ax);, F8 Q8 u4 n: B/ w
}
% ^6 O0 z) X* z O _ void cxc();# ~# Z9 n3 a4 H9 L- L. Y( T
bool qyu();/ N+ w+ J+ t/ Z* O( k
void add();
7 i$ f1 P) D+ w" J) k};
6 ?' d' M4 q" }void Checkout::cxc()
% ]- x: o( _7 v2 g/ c* z: I{$ t! t- U3 q+ [% R/ V
for(int i=0;i<4;i++){
3 }8 [& h0 V9 t4 } ax[length+i]='0';
9 {) k& ]0 P, y) h! R. u) X' z }
& ?+ l0 i* D0 D2 H- L}//将输入序列后加4个0: A& ^0 M" Z S' T) q2 C
bool Checkout::qyu()! ~& M7 `1 l0 z4 j
{2 b6 n* H M& ~# s7 m
char c[5];- W7 x) }- A7 l! |2 ?7 a6 O( ^
int i,j,n;
; v4 o( s" x9 V8 L" H3 S9 K int m=5;
3 _9 x6 M% W! q( a3 m+ L' u for(i=0;ax<i>=='0';i++);
7 ?+ i$ u( {7 E, Q$ A( ~% n& A if(i==length)7 y2 r% x6 H+ h! h5 [( h _# [; r
{cout<<"余式是0"<<endl;
) S U# ?# a+ T. } cout<<"发送成功"<<endl;' E4 m7 A# c$ B$ |
exit(0);5 Z0 w8 ~9 l+ h* ~4 W1 V* x
}
0 A; d& m9 q% f! E. f: lelse{8 h' x. `2 N! r# ~
for(i=0;i<5;i++)
% y1 K* W& `+ {0 M0 a, `$ U c<i>=ax<i>;$ m* I( L# P# ?, q1 }0 F7 y! G2 f
while(m==CRC)& l& y7 }7 `1 G8 ~
{ for(j=0;j<CRC;j++)* d4 J5 {0 l5 F
{ # R! Q* p4 q4 d4 Z4 Y
if(c[j]==data[j])
# F6 s+ O; ]. C c[j]='0';
& q" C* `- o$ \3 ~7 i. h& B6 U else
, m; {' Y4 S/ c' `: |* X9 O. I" u3 w c[j]='1';
9 l/ y( @* `& p% E/ ]4 Q9 B }3 |2 t+ ^- k! m% e9 ^' {
for(j=0;c[j]=='0';j++);% E/ x! f d" \
n=j;' d! k- f* _" l) k k
for(m=0;m<CRC-n;m++)1 a" z, z% _0 }1 P
{
5 A0 A, @( b" B) ^ c[m]=c[j];) |" y+ t" T' `- B2 z! e; S* Z
j++;$ b9 v5 j. |. X
}
1 b5 I7 \; B c5 h+ k# Z while(i<length&&m<5)
. \0 r6 E8 o; t& o, Q( V6 J+ I {8 a) x/ F) ^8 T5 g, D
c[m]=ax[i++]; + C. X4 f0 I; @3 g
m++;
1 s9 d' @! H9 ?# E6 n6 g9 R }1 [0 k0 y$ h% w0 x. ?
}
+ t- W% \$ n8 ~& V' ~}
) x2 i& A" A% ^. e3 {# m f( m1 A7 f int k;
& z6 ~7 [' |; X for(k=0;k<m;k++); I! d+ z' V8 i8 E
bx[k]=c[k];
7 _' e2 W: U" q* V+ m+ c3 S for(j=0;bx[j]=='0';j++);
6 j! Q. V$ R# X5 `4 K+ F if(j==m), R0 _: ]$ s# L& [
{cout<<'0'<<endl;
5 {! ]4 j& s0 h7 W x=0;
3 D0 f }) g* [' s7 p J, j return true;
6 j% g# f1 \9 h* A: n }
* w/ P3 Z8 l( S else5 h I+ ]' M+ X2 J4 G
{for(n=j;n<m;n++)+ }: c1 k3 a8 e x" `
cout<<bx[n];0 H' l8 r2 c3 U
x=m-j;
3 H" d5 ?+ s' S. x1 I cout<<endl;
/ a; p+ h1 V( z7 K return false;
* G& h3 G' b4 C9 ~) k" p }
* Q' W h4 i5 {& |}
7 b3 x) n8 X9 A) a$ uvoid Checkout::add()2 w$ e+ F( n2 m3 |( v2 u
{
) ~% D% E5 C: W8 f+ @6 ?) {9 Z0 oint j=0;
4 X* g P* i2 {8 P3 `! B7 P for(int i=length-x;i<length;i++)
- U3 V# p7 I) u @ ax<i>=bx[j++];# `. |& m$ ?% {! \5 V4 v. K8 m
cout<<"发送的序列加上余数后变成:";
* q4 k, ]7 ^/ S+ U3 C# @4 p for(i=0;i<length;i++)
1 B0 ?1 ~3 h. J cout<<ax<i>;
9 E- m# c& }. D; _8 Q. r; [6 o- O cout<<endl;
4 m" V5 ]6 W+ y# k- O}
/ l3 V! P5 @4 l+ |. c" Svoid main()3 `2 U2 F+ ^7 }8 b8 d* d; j! n* w
{ 5 H( M ]8 L% M" M
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
4 b: I1 ]4 A9 F4 \2 T cout<<"请输入发送数据比特序列:"<<endl;
& G2 U% x& V7 [$ L; s Checkout test;
3 d4 y! O: u u) R' ^$ Q# r! S- a) ^ test.cxc();7 Z) e6 m; h$ E: R
cout<<"余式比特序列是:";6 ?7 r0 A) d U4 S' C# w! B* i" @+ {" z
test.qyu();% e4 U/ F: n3 c7 r j4 d
test.add();
6 r" p. \* V& K cout<<"试试这次是否能被整除."<<endl;
5 W7 A }/ q& q% e+ W) Y n cout<<"新余数是:";3 F G$ b/ W0 l3 `3 ?
if(test.qyu()); Z' c0 I% s7 H
cout<<"已发送成功!"<<endl;
f8 g2 i2 _2 v else0 v$ ?& _( s& s
cout<<"未发送,失败!"<<endl;9 T. |' u$ g0 L, u6 W
} |
|