该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
' ?5 B' P/ i: N0 L( N#include/ ?' }0 D: Z0 l/ F; R% e7 T+ w* ~) l
#include
4 X$ B( }) M9 e1 j: E% [% ^#include' {( `' o2 `, Q7 [% e$ Y
#define CRC 5
$ J9 w2 n/ T! ]" j; l+ jchar data[5]={'1','1','0','0','1'};$ P3 \, \( L1 I; A
class Checkout
; L3 @$ |* S7 ?( \5 w' Z& m{: B, c0 _# t, c
private:2 J; i/ W; W) H+ w$ g; Q( }
char ax[50];* H5 {0 R, |' K7 ^
char bx[4];9 r1 X3 b( G0 g; m7 f
int x;. A% X& Q7 f% a- e8 s
public:
- ~1 _+ v& A# u1 w int length;
, [, z3 p; b- G; `% @ Checkout()! H2 |' J* c( P0 e" f* k5 }+ N
{ : o+ F5 z# Z, l6 x5 H
cin>>ax;
- m. A! d* Y0 @1 E" x6 Z length=strlen(ax);
e8 z0 D( p1 ]% S }& H- O% Z# ^( K/ z8 `4 }7 }
void cxc();
1 L9 q) I' W! k7 E bool qyu();
( c/ N$ Q- J& N. w. o$ n void add();
b- o3 h/ \+ h2 m: W};! m* ^) Z/ w# L0 U L; ~" u
void Checkout::cxc()& F7 O6 \6 M: b: M/ O' q* J
{1 v {4 r0 M% q* d% s7 M
for(int i=0;i<4;i++){
. \7 h, j4 L! l0 Z; G6 ^7 R ax[length+i]='0';
6 y+ }: z9 y# c0 J6 F, z! J. N" M1 k }0 ?: v& h- c/ |/ K9 z: k& c, c
}//将输入序列后加4个0( ~% C; y2 V0 j4 y1 ~; R
bool Checkout::qyu()2 C7 X% b( k; W0 \5 ?
{0 B9 |- |& f. p
char c[5];2 u2 Y; r! l$ r) E4 _1 T3 s
int i,j,n;
7 b3 @' _/ S- ]2 f int m=5;
9 O' h0 `" F& g. {5 J2 t for(i=0;ax<i>=='0';i++);
% P/ F! w9 E& M% y if(i==length)
+ I( W& C' t& E/ X. g7 { {cout<<"余式是0"<<endl;
. }' W# b/ S6 T, h" m cout<<"发送成功"<<endl;! `4 n& p$ g$ T, v) t9 @
exit(0);, o7 S/ g6 r5 o3 v; h; R
}8 H y* E/ f6 O1 X
else{
2 @# O% B0 I+ [2 P8 S# Z for(i=0;i<5;i++) ^2 I; q" O2 G7 g ^: [
c<i>=ax<i>;
; E* z' y# Q% Z$ w while(m==CRC)- b' @' x+ K4 s$ m% A: ]4 i
{ for(j=0;j<CRC;j++)/ h1 [/ g8 m0 i1 _0 u5 D3 c
{
% K$ `3 \6 ^+ s* W if(c[j]==data[j])/ }) L/ Z8 V6 J4 \3 f3 |
c[j]='0';6 L6 g0 s& Z4 V3 @- W/ v( t% J, j8 r
else6 Q) S# s1 m# \: k4 _1 E0 _
c[j]='1';
2 |" F$ n4 y, T) o) f7 @7 O# \/ p7 M3 w }
- v1 h. R: _" e$ G, | m' g; G for(j=0;c[j]=='0';j++);
* P3 r/ X! K' h) E+ S! A n=j;% E S$ o+ j" e
for(m=0;m<CRC-n;m++)
5 b( S! m" O5 l1 W7 w, E {' w$ v$ e F7 f
c[m]=c[j]; L5 \4 D2 l. X$ Q: w2 a
j++;% y3 `& S5 t& t
}- k- I% u8 R. A' F& V2 q! @6 h. b* O
while(i<length&&m<5)
, Q6 q5 Q5 B) C5 m J1 D# n {
- m/ b# V' j. c; M$ r+ h, m c[m]=ax[i++]; 1 x- N. ?% _9 x$ ?
m++;
' s$ J/ M, T- E4 T }6 W( O; J+ Y0 d$ H, u
}9 S; c$ W! m+ i; J/ M- G
}
* {) m! A h5 X# Z0 Q- F& W- N, A int k;
% v' W: U0 M$ s( g6 x for(k=0;k<m;k++)
9 [! B5 ?/ W* i7 S; J bx[k]=c[k];' z$ \ c# q2 V8 `1 y
for(j=0;bx[j]=='0';j++);9 W/ S7 @' d6 W# y I4 _+ v
if(j==m)
6 {7 W9 P! ~. f" r! m# E$ N, w& c% t {cout<<'0'<<endl;
& V' Y+ h% |( \3 Q4 b) _ x=0;1 C9 g) d! u: E Q/ i0 G0 J
return true;& X/ H, L; O/ m6 f8 L+ m+ R8 l
}
5 M) X2 w' Q0 v- V else; Z) w! U0 e- f3 O4 ?; _3 u
{for(n=j;n<m;n++)8 T' Z: c0 E+ a' i6 K
cout<<bx[n];
$ g( H! g, S5 S8 |& z* D; W x=m-j;
9 o) b$ g" W$ H! z- C1 F" K% d cout<<endl;! W7 V7 D( J3 a
return false;
% e4 u4 `$ Y3 Q* p' E% { W }
1 S k2 | K- c3 A& G}/ @5 Z7 Y5 _# |# {8 g
void Checkout::add()# ~4 U- M- Y. I i
{7 B/ r( b9 z: ~$ M- k+ ?* g
int j=0;
8 w4 A' ?+ i/ k: u6 @( q9 d for(int i=length-x;i<length;i++)
) `+ @/ [0 \$ J5 l: y4 C( y. P ax<i>=bx[j++];, l+ ~0 `2 ^2 p# g/ P
cout<<"发送的序列加上余数后变成:";
' S1 h0 x- T( P# x7 x# E( p& } for(i=0;i<length;i++)- D1 ~( y, Y" F3 N4 F3 X# J/ M
cout<<ax<i>;$ P, g) h2 U# K# K, N8 D
cout<<endl;1 y4 r% g/ U% z/ t4 e' j" V
}& C( ]4 Z. B9 E8 j4 r
void main()
- t8 S( i( L% h3 N{
* W; c8 d4 d! E2 T5 P) ~ cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
1 `* A, W+ h( V1 A$ T3 e. Y; h cout<<"请输入发送数据比特序列:"<<endl;
1 ~# [; y. o! K( L8 s Checkout test;
+ p& X- J$ T, k2 D9 ~% h2 O0 Q test.cxc();
2 Z# R* {: x: L4 g% n; ^9 J9 s cout<<"余式比特序列是:";0 V; Y9 ?8 u, y- z
test.qyu();
7 h: {3 ?% X8 i) U" n) o$ ` test.add();
* ^9 o$ |! s& ?" `; V7 F, w cout<<"试试这次是否能被整除."<<endl;& b! W; G' c# J$ P; D5 `3 m
cout<<"新余数是:";1 ]% S$ Q! r1 l2 ^- ^4 l' u: n% u
if(test.qyu())' W6 ~9 q9 i1 W1 ]) ~; B4 U
cout<<"已发送成功!"<<endl;
6 \0 t$ |7 _. H) x8 T# L6 m else3 L- f$ H5 \# X3 z' j
cout<<"未发送,失败!"<<endl;0 M% k& G! ^* Q& ^ V0 d3 L' f
} |
|