该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊6 I) ^. W) l& X4 p8 M$ p
#include9 h3 P% ?+ U% n+ x! M0 ^
#include
/ F6 L: M6 h I# r* [) x {. H& p/ O#include) X( Y/ \' R3 Y, l! C: v
#define CRC 55 V% J) S% P3 ?+ O5 R6 b: E
char data[5]={'1','1','0','0','1'};: }! ^4 w7 @# a; d9 [6 p
class Checkout# f/ A0 b4 |! w+ o$ B
{4 Q& ]) S- e/ V7 @. ^
private:# m- ~. i0 c7 L6 J* I5 A v
char ax[50];
# b$ a% ]4 e8 O char bx[4];" V" A0 N S0 x4 {
int x;
4 r/ t* m+ H/ t6 y W1 Zpublic:8 n; k2 n# {1 L& O
int length;7 S1 R7 c Q3 i/ f {* O- c4 m
Checkout()2 P8 q }1 d5 o; M& H
{ 9 c4 F6 Q. k: z7 c+ ]- C& @( t3 @
cin>>ax;2 c2 r* ]& a' o' n% @0 q9 C
length=strlen(ax); f/ b: b+ P/ q7 K
}
% \$ m( H% ^/ R8 T& H$ y6 G void cxc();
: _5 z' u' x: K8 B# f bool qyu();
/ D8 k) i) R( b$ c+ R1 T4 @ void add();; e: r5 B: [& u$ f) K+ z
};
0 F' W# N, y* p: I* ~' |) Qvoid Checkout::cxc() H! ^ b+ D# f& D' [
{4 W; _" m: g' m3 L
for(int i=0;i<4;i++){% h) G( R2 K* o ^ g
ax[length+i]='0';
8 N8 B+ Q" T, q6 b' e& F V }
( {, U; D# b+ D: x6 [3 u}//将输入序列后加4个0
& ~5 X: ~# C4 F; Y' h. w& @0 [+ M' M5 U$ Kbool Checkout::qyu()) U1 i8 W* t6 W E# }" w
{/ W+ w9 c9 D! Y" a! q
char c[5];
$ h) d( n2 }3 P int i,j,n;, g* L8 F5 A: E' a* j
int m=5;
L8 {+ p9 T0 T) v for(i=0;ax<i>=='0';i++);1 o/ f! A* s9 T/ ]' a
if(i==length)
2 C( N @; c( ]' \2 K y {cout<<"余式是0"<<endl;) K e* n- K- z/ F" y6 g$ g4 V
cout<<"发送成功"<<endl;
+ z1 T% \$ O D2 C% C/ ^' U exit(0);
4 g# S; T9 s& T/ a1 M }. h; i& T, c5 K
else{
! ~7 }8 z- `- | for(i=0;i<5;i++)
& x L- A0 O7 i c<i>=ax<i>;. L9 j4 `& m% R! p7 h' q' I$ v" S
while(m==CRC)! ]9 D1 j: ~& j" ~# [# f9 H3 j
{ for(j=0;j<CRC;j++)2 ^+ {: L! h% J! b4 f0 n
{
* x5 }; _$ k% q; z+ i6 d( [3 f8 I if(c[j]==data[j])3 c& s; p/ R9 u- _, F
c[j]='0';
+ n) C: D7 v( b( d* y else
9 U6 |) \/ K/ x& f' G" h8 _0 W+ O c[j]='1';
7 B) R$ ~) [' _; i1 n2 q4 g }
4 u$ n9 ^0 r: n$ D* _# D for(j=0;c[j]=='0';j++);; c. S. Z3 a+ U; D* ^; Y9 c
n=j;0 I; Y3 G2 p) S6 b# U: \! X% |
for(m=0;m<CRC-n;m++)
( ]1 N0 c* n% T {
. Z' z4 _9 i4 t& L c[m]=c[j];
* H3 i6 @3 c% A j++;# w+ c- ~. e" M! l& q
}
8 j' t C2 A5 e' n while(i<length&&m<5), w4 @- L' Z3 T& c
{
- l5 F0 y- r6 _& w c[m]=ax[i++]; / }; N; R" R0 \6 ~2 H
m++; * X2 K, S4 K1 |( k
}9 o7 v, d4 \- F1 f! r/ w" V
}% z( g8 ^9 O6 G* ~2 Z4 Q; l
}
* R% l$ q) U$ a2 H int k;
( p# g: K/ C2 F [" E/ p for(k=0;k<m;k++)
* L9 m' h6 y( p/ X/ H/ I4 }" } bx[k]=c[k];
1 ?$ H5 V, }% ^7 d6 w for(j=0;bx[j]=='0';j++);4 C) W5 h6 E: `8 ]9 O/ d2 w
if(j==m)
( M5 c' ?+ k* e" k* s6 c7 R; c {cout<<'0'<<endl;
- l" z; b. e T9 M$ }/ H x=0;$ q6 I/ b. {2 @
return true;% s8 w* q- q; L+ F! I. a
}9 r2 z" k8 K; S! L( Z2 R, q
else
. G# D) A3 \# m% F/ M {for(n=j;n<m;n++)
' B4 G2 h: s& v O cout<<bx[n];0 B5 L# `1 h, A( p' b; w
x=m-j;
$ H5 ]2 f5 U! o$ \* U cout<<endl;
1 Q( u5 e8 W7 u9 ^4 `: u return false;8 } b W9 T/ ]/ ]+ P' f, F
}
3 a! ?* T* N* A# Y0 C; T6 O, k}! ~( m2 v! o/ \4 F* I7 w
void Checkout::add()) A+ ~ D/ N% \/ a3 L
{
\2 A6 v. v5 p+ fint j=0;9 o# B3 a. {, p* U
for(int i=length-x;i<length;i++)- E! t- n( F2 s7 {
ax<i>=bx[j++];! M$ i9 ~5 V% s4 Z
cout<<"发送的序列加上余数后变成:";
# {% \; u$ l- d) m8 ^$ V for(i=0;i<length;i++)
6 h6 @) Z4 L7 o# j cout<<ax<i>;& m1 O0 n3 C2 ~8 k; D7 j
cout<<endl;
* G2 W, f* ~3 U4 K p' w: k}% d% K+ A0 ?0 v& s+ w' W" H
void main()
" b- E) v# D0 ~/ r* v' n! Y{
: D3 ]) E0 a! ]' X$ z cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
' {" K& c9 O; [& H+ R7 T cout<<"请输入发送数据比特序列:"<<endl;
% k& Z+ O9 N* _0 o$ J0 F4 t Checkout test;- o$ }; |/ G/ F/ q$ p% L; W; e: }: g2 g I
test.cxc();: e, R( F P( b O& _
cout<<"余式比特序列是:";
1 E; `4 ~ g' _9 x test.qyu();; L% S1 w! j: X3 I# s
test.add();6 ] M! z4 i- R
cout<<"试试这次是否能被整除."<<endl;
- H+ w% {* N: I4 O7 G- \ cout<<"新余数是:";, t6 [% u% e! n( @. L; b% l: e
if(test.qyu())& _7 X1 G- j. ?7 U2 Q
cout<<"已发送成功!"<<endl;
+ A& m- f5 r7 ]$ e. {# M else
! g" |6 B! L( N3 M8 ~6 G cout<<"未发送,失败!"<<endl;
5 _: c1 `" z: Y; ]/ q2 m' A} |
|