该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊: p; J" r) q0 x8 z2 [
#include! M8 v7 |3 P; k. a; S
#include5 b j9 [5 a) m `
#include
) E2 c3 l) e5 d% [# @$ ]#define CRC 5. S+ A1 `* J, g P% J4 x z0 c
char data[5]={'1','1','0','0','1'};
8 H0 U; S+ ^+ A+ P9 b- F& ]- ^class Checkout
/ z8 `5 D, T/ C$ Z( |% Q+ p& @& R{
9 \' s' ^# l2 O' o0 I. @7 y( eprivate:6 m$ A" J, @6 t$ `7 g
char ax[50];* U# M: L9 Z& M
char bx[4];
: P6 d9 |6 f& H$ X2 t, T int x;* r) t o$ H1 |2 T" h( `
public: I9 @8 } s+ {1 L$ K; S
int length;
* J8 A% V' R- R Checkout()3 O( h# V. e( _6 p# ~, p
{ & b, Y9 q& {; B: M `
cin>>ax;7 M0 R- t* [1 C3 n+ ~* l
length=strlen(ax);
0 A3 L1 F0 q( k" o }
4 ~3 }9 k2 t8 a& ? void cxc();
1 i( r" v1 P$ \: ] bool qyu();
+ N) j6 X: M' Z* Q void add();
) [. s: l6 V( P1 }# D}; v# D, N( t' y5 w6 A0 e& E" Y5 }1 _
void Checkout::cxc()
3 q \' \; A7 `+ P{/ J- x/ V, F8 E D0 T, z9 K! K
for(int i=0;i<4;i++){
. l" t) ]3 k7 T) O3 H: t' b ax[length+i]='0';# {% S/ E( }. z( _1 ~
}
" P- f7 D. I5 y}//将输入序列后加4个08 N; `4 Z6 M( g% v( {4 ]! m- h8 _1 f6 N
bool Checkout::qyu()
9 y; L8 x% A6 Z, e# P{* Q$ }! {7 s1 z$ g A6 a: j- t9 B: ~
char c[5];% a2 [6 z( \/ Y0 k6 \
int i,j,n;* R3 _, K* X3 \* H9 f* A1 y
int m=5;* l& X) H& E a% s
for(i=0;ax<i>=='0';i++);
; N. z8 F, t+ M V0 N' m if(i==length)
4 T* G# O9 X9 {" j% r5 z {cout<<"余式是0"<<endl;/ V# F. B; i) l/ O
cout<<"发送成功"<<endl;
' Z) x: I) C* T exit(0);7 u* n2 \/ }7 P- Q ~; E" e- z
}5 p9 ?5 R% O( w" l% }! h' t! x
else{
, g7 B& \8 A. _" r for(i=0;i<5;i++)
) D/ R7 l2 l+ _8 I c<i>=ax<i>;
! o: `( C' E2 F' @, X6 w. g" d while(m==CRC)
J7 v' l) t4 p! n( \6 u6 g' ?- c { for(j=0;j<CRC;j++)2 J, `$ R$ z3 |0 J3 T
{
/ V6 E. U2 S* t' P2 ~! `9 v1 k1 ? if(c[j]==data[j])+ `7 v/ L+ N+ E+ @1 r8 L
c[j]='0';
0 I5 ]9 @8 B5 D' E2 _1 h7 ? else
2 @, R0 w$ M+ x0 L' g3 H( p c[j]='1';+ N/ n" v9 D; ?1 b2 G1 A0 w7 @
}+ o' e( Z: B4 T/ J7 X: o
for(j=0;c[j]=='0';j++);* \/ j9 U! r$ _' N5 f! S1 h
n=j;
0 e* O% ]0 A% A; x: M! j- A' v for(m=0;m<CRC-n;m++)
/ D, Z3 J" Y. R {
. k$ C# z: f9 A8 E- m: ` c[m]=c[j];/ L4 X$ q: G: a8 C
j++;( r/ @3 [. K8 o. m( ~
}' c1 k0 {2 f" s& n( M
while(i<length&&m<5)& u- X w- p- `1 @, d4 p$ i
{3 {9 w% t M# @- f7 L I
c[m]=ax[i++];
u0 c8 _- s# X0 H& k" m* r m++; 3 a" }: t) a$ N* _: w+ s, L
}; k1 k) }; _) w, S
}$ N* q9 b4 D4 o t: F
}8 a' f# M* c5 K% K0 l
int k;" \8 y3 C1 G# L8 a/ v" Z7 f
for(k=0;k<m;k++)& p0 R; D- M5 {( j; Y8 e# F
bx[k]=c[k];
, e: } J4 p. k ] for(j=0;bx[j]=='0';j++);) J& T7 V! X- m
if(j==m)
, |! u8 e, L+ X6 w% S {cout<<'0'<<endl;
% e; t/ l& E7 S& j" I [7 | x=0;. x) ]7 ?. Q6 V U' e' s6 t: i
return true;5 e5 o0 ?6 E# [1 w0 {6 h
}4 c, \8 } N; P6 o+ ]: W4 @- Q
else5 C1 }3 Q1 _% D- G7 A
{for(n=j;n<m;n++)
: K' p6 R9 j5 a9 B2 D cout<<bx[n];
# {, Y- x9 d: a3 o, w8 E) t x=m-j;
7 l: j) K( z& W+ T; S/ I cout<<endl;
* U3 D9 K- q5 b& g return false;
; n1 u, |! B0 ?8 h }
. S! o! B7 M9 F' c}$ `- F8 N( o5 Z% M* {
void Checkout::add()" L' s8 R) u9 A6 ~
{! `! W" O' M* c) c6 J- ~
int j=0;
8 B- L, T8 `( h* s- T; g for(int i=length-x;i<length;i++)
/ u6 h( T- Z4 J# S2 A ax<i>=bx[j++];* H$ P% G6 `; k' A& s; m+ j, S
cout<<"发送的序列加上余数后变成:";
2 R' Y" J" ^+ i& }! g! e for(i=0;i<length;i++)) m& h' o& a. f3 |( Y: x
cout<<ax<i>;- {) g1 }2 f3 K& f! Y& [, L2 c
cout<<endl;
4 M% M, T+ q+ ?; T}
: C* c& X! q- P) Y+ n8 Q: Ovoid main()
, k+ V4 h% o) p. `) m9 M6 P c1 P{
: J7 Q; ?! Z1 ^& y" P cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; ! x. j- X+ A& _6 r
cout<<"请输入发送数据比特序列:"<<endl;8 H! v: L0 }% B; t! L1 R
Checkout test;- u1 q7 J% ]* O6 H+ u
test.cxc();! r3 D K) O) o, R' S
cout<<"余式比特序列是:";3 h! _* G& A! i' Q/ g
test.qyu();
% ?6 x6 D, b7 j9 d test.add();
) G. q3 t9 k# k9 K8 v: y cout<<"试试这次是否能被整除."<<endl;& r& J$ U6 I( j# O& a+ p
cout<<"新余数是:";1 H1 e' X% H; Z7 I! A
if(test.qyu())
0 m7 y( g g; I cout<<"已发送成功!"<<endl;
8 V' t% N3 U! B8 t else
+ K, V7 N4 b, ~. _ cout<<"未发送,失败!"<<endl;0 F0 F$ n( y- | m2 K; k
} |
|