该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊 F7 b1 l7 I$ a
#include. z4 A% @! M$ o
#include: ^, i- e8 ^7 Z0 @: V9 M
#include
- [8 P4 n5 A. L#define CRC 5
& m7 }4 o; p% o! Hchar data[5]={'1','1','0','0','1'};, v8 H( h" d7 [
class Checkout
9 H8 p- R1 y; ?8 a{
) N6 \# w( y; ]; Jprivate:
8 m5 } v8 e5 R3 f char ax[50];
. o4 r5 O" S/ ]* q' R9 D/ S char bx[4];
- R3 u$ L) }( j* [, s: G int x;5 I/ A- r% W* c- A7 d% f/ d
public:
4 ~1 q# [0 P3 o @0 J6 M int length;
) R" T% x9 X# h1 Q* j- U! H$ I Checkout()" c' h. ?6 D. r4 o. C& k$ C1 g) i
{ ; G$ t* L- A4 p
cin>>ax;2 M' ~9 ]& M0 z% `+ h: ^
length=strlen(ax);5 Q) D3 }- V4 |5 R$ {
}
4 y, F$ x+ C4 S- e: ~+ g void cxc();2 k1 g' a; @+ Q
bool qyu();0 R8 \* [. {/ g, m9 F8 S
void add();
3 [1 A3 G, G6 P( q};
; j6 P3 U5 I! t4 g d+ P7 A# Fvoid Checkout::cxc()7 m2 Z! w& e. ]
{
7 l _8 P# L+ O) x" u% ?. B for(int i=0;i<4;i++){5 U% i' M, ?+ a' y) P( d
ax[length+i]='0';
/ U# M/ [' \% a6 h# O" [* M# a; g6 d }* ~; ~0 o+ x0 g j7 G
}//将输入序列后加4个0) g+ l- ~% l9 }! P% E
bool Checkout::qyu()& e+ j5 A0 G# W7 b
{
5 N" n! X. _+ D/ B* e' O char c[5];
1 B. h: r. i5 d/ m6 z9 I4 `" C8 H int i,j,n;/ z2 h6 X9 n8 ~
int m=5;1 H, k f3 ^7 X! Z! b; z
for(i=0;ax<i>=='0';i++);
2 N1 Y4 @9 o1 D/ B if(i==length)- c2 x0 y1 X/ c! o( j# N# P
{cout<<"余式是0"<<endl;
) K2 N0 R* b- Q" Z5 _% s% i cout<<"发送成功"<<endl;
k! [* P, P V/ R; V# S) r exit(0);
: ^8 ?0 s- @: O7 R5 V }+ B& e. g6 n* i, z" d
else{: b" Q% d! J5 u4 P
for(i=0;i<5;i++), C& Z3 ?( Y3 P9 b! h4 G2 ?* Q
c<i>=ax<i>;
; f/ b3 ~! M" ~9 ]# R while(m==CRC)
B/ R5 c# o; U* i) l. s% V6 B { for(j=0;j<CRC;j++)
. C' Z2 W1 n7 ^) P Q% { { 5 v/ y3 U, [. S% {1 A* a
if(c[j]==data[j])
$ ~/ n3 {! k& |6 e c[j]='0';. B% z( f: U3 q& ~" }; f' g! K
else
8 |1 C" N2 \0 N# a8 x. }3 F; d c[j]='1';1 T4 o# A; T9 |
}+ L5 {# A! C: f% y
for(j=0;c[j]=='0';j++);
. l; P1 L$ r0 n3 A; M2 V n=j;
1 K0 z @3 T! b) n' w: H* }# K0 q for(m=0;m<CRC-n;m++)% K' `, ` P& g6 R3 }( L
{# V, S2 v, `# r8 O) S- h B
c[m]=c[j];
% d8 W3 I1 {$ q j++;
; |. K- @# \( T8 ] }8 R. F" d( Q' U' ^
while(i<length&&m<5)
( l! _4 a% h4 \ {- u6 y3 ^2 L/ T. B0 G
c[m]=ax[i++]; - ~# p* L* \- N9 f
m++; - \) D! N7 z! \) U" D
}
( ]5 W" t8 a4 S }1 e) M$ H0 i5 S( }+ z4 A
}
+ q( v; y) P8 P8 E, x& l7 A int k;
+ ]% @, _; h+ e( T( H/ w0 O0 a; t for(k=0;k<m;k++)
' O4 q% Y) M( i# \0 K2 }7 K+ O8 m bx[k]=c[k];
S, A6 c" L. s0 y0 O& k" X for(j=0;bx[j]=='0';j++);: G7 q9 Z; d% ]4 [
if(j==m)
$ H! U+ t6 p" w+ I, J H3 Y) @ {cout<<'0'<<endl;2 B+ D6 T5 l$ T4 m. D" g9 |$ E: d
x=0;
" }7 r& A+ {7 w return true;
- N/ h T& }$ W$ L# V7 F$ e1 v }5 j9 {/ Y- I2 X# s
else
: L: X9 ~+ Z0 Z. q8 P {for(n=j;n<m;n++)8 r1 B" g$ c: D" e- g* c
cout<<bx[n];, S7 `6 s+ W: |0 l% b1 z
x=m-j;8 O. _+ U# b4 y% N9 d4 P. Y
cout<<endl;: r9 j4 _$ S7 `, ^# b5 ]. M
return false;
/ w& y9 v1 E1 i9 U' E" d6 S% M, ~ }. a& J& |+ @0 H, Y+ Z
}" ]% y8 R) m& C# w5 E
void Checkout::add(), Z1 M- Z7 z2 U. k- z. t: L6 A
{4 o" ]9 r$ E4 q7 |" \: |& T
int j=0;3 M6 t( |4 O5 ]: O9 j1 ?" k8 H
for(int i=length-x;i<length;i++)
7 [/ k7 \. k4 q) ?+ \ ax<i>=bx[j++];
6 j" x( v; j" [+ x cout<<"发送的序列加上余数后变成:";/ K& L6 U1 e1 a9 T$ F
for(i=0;i<length;i++)+ ?1 A; W& y2 m' A0 G
cout<<ax<i>;) _4 Z7 h7 P9 h) X7 Y: y" X
cout<<endl;, X5 M0 x2 v. @- f8 V0 t7 m& F/ M
}
2 C# J7 `( o; f0 Zvoid main()
7 }8 @# `6 B1 R. Y{ - E% _$ E2 @) {$ ~# [
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
1 z! A; v& G/ \3 g7 J" v" @" r cout<<"请输入发送数据比特序列:"<<endl;
7 q. F3 o7 b5 o* i! U1 v5 r Checkout test;! t6 Q% \! R+ ]5 K; U
test.cxc();
. x5 U: [5 ]0 B9 s3 I cout<<"余式比特序列是:";
# Z: f9 ?& l. [/ ^8 ^. L8 F test.qyu();. M6 f/ e: v/ v. o
test.add();) U; H9 v! `0 w* g# r& s* H3 S) n
cout<<"试试这次是否能被整除."<<endl;) ]' a# R; H4 L: r0 J
cout<<"新余数是:";! J/ n# G3 d* n. }5 G( l
if(test.qyu())# G* ]& B. \& O3 i- R
cout<<"已发送成功!"<<endl;
7 [, W, E: C' X3 O+ w2 C else9 N- p( N* p) J4 K
cout<<"未发送,失败!"<<endl;
8 Y% z, g: H- A+ o4 v} |
|