该用户从未签到
|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用+ a8 c0 ~1 Z; n6 \+ w$ j
#include( f& Y# Q: e U2 p5 E u
#include
& z5 o" p# c* v#include
5 K6 Y2 G- o, t0 V4 j9 X- A' V#define CRC 5
0 E1 s! n3 ~( T! Ochar data[5]={'1','1','0','0','1'};0 u- p, D* ]) Z% s
class Checkout2 [2 r, C, p3 N& R
{
; y6 f% Q* p* y/ lprivate:
( N' H* R9 e5 |& ~* F5 p char ax[50];
7 F" Q! ?) v, \' w, V- J char bx[4];/ r9 J y* Z5 X# S& X+ O; R
int x;
8 R6 `. U6 o! X! cpublic:
0 o4 R6 U0 |. c5 ? int length;
( S v2 m [ X4 e; n) N Checkout()
9 |) A0 m! P4 ~3 X7 O/ Z1 p { ' }2 L$ Z# G# G
cin>>ax;
: N+ o ]2 K8 S" j; S7 C length=strlen(ax);! Q( J4 U/ ^: _2 j, s3 q9 ?/ ]
}2 y$ M; b7 C, l* J. z6 a% \( G
void cxc();3 M4 N2 w5 P6 l9 o7 X
bool qyu();
5 `; I3 O5 a+ P# B void add();3 `' O! m5 Y4 L
}; [ ~8 A0 n1 Y* C' t7 Q
void Checkout::cxc()- f2 p; r8 _) p( r3 \
{. Y% ]" e7 z& R% q6 h; c4 o& ~
for(int i=0;i<4;i++){# g G5 f* I1 |* ^& q" `
ax[length+i]='0';) n. z6 m5 E: r9 m, T z7 S
}
, H* N4 h2 g9 U- T+ M6 o5 J8 V}//将输入序列后加4个09 F1 t; C8 g4 w% C( ]) A
bool Checkout::qyu()
1 K1 j9 v3 {* w{4 t/ z' a8 Z* l5 j" C/ e' p! L
char c[5];
C$ _ Z) U' ^ q" b int i,j,n;
3 i# F) a0 o" @! G$ @ int m=5;9 u4 _9 f8 e D# f9 i2 _
for(i=0;ax=='0';i++);
0 a X2 |2 L. k4 c if(i==length)
: |4 Z8 Z/ P- v; t4 Y$ d7 c/ O$ i {cout<<"余式是0"<# v, F+ s; t- W. X* W8 s cout<<"发送成功"<4 L& L. B& S2 Q9 t6 c* q exit(0);* O3 M2 x5 D3 M; s; O, w8 `
}
7 t, t( M8 ?# ]: u* @else{
2 H* v7 f3 H. g; c' _( `: W% B for(i=0;i<5;i++)
8 j+ @! }. j/ d* A c=ax; |% C% P0 k; E8 V8 [
while(m==CRC)6 `3 H4 G }4 @' `# z1 U% o7 y& s
{ for(j=0;j. G& D, \# o1 k V0 H
{
& q6 L2 v% N3 a9 c7 j( g. v- B if(c[j]==data[j])& U1 u* Q$ f# [* e {# A- h- R; r. P, e
c[j]='0';7 v" i: w0 v1 N7 H: T: C
else
( O$ y& m8 z& n4 b6 g9 V3 v r c[j]='1';
* @; T& A( p1 l2 z' Y# y }: O2 P5 m+ I+ U! T. q
for(j=0;c[j]=='0';j++);5 A+ M1 b: f- l/ B" W
n=j;. j2 M: y: @; W1 u4 J0 i
for(m=0;m& Z2 Z/ ^4 o* @8 u- A {* J" e% W2 H( e5 b+ n& I( \
c[m]=c[j];
4 H: j3 M; B3 Q& F+ Z j++;
2 I/ ?( }7 U2 x } V; p; p1 c/ `1 x. Z
while(i# t$ M* }" \2 s$ d$ \! M) Y- @! H' ]
{
4 o$ A6 k' \8 F& u9 E6 s3 n c[m]=ax[i++]; # N' z5 m9 E- j! f
m++;
4 e+ t+ W" G9 Z" p& e }
/ X' J% _+ U0 p6 D& v }
" P1 ^" S$ C- b}* x( _' r1 e0 z- C- h
int k;
( u- A0 Z$ E6 x% L4 G& n5 N for(k=0;k d9 D: P! e3 I bx[k]=c[k];
' Z2 S6 F) e% \: i, z; N6 s+ m V for(j=0;bx[j]=='0';j++);6 p; j9 Q" }+ F& R$ w
if(j==m)
% q( }* V8 t: k2 y" R7 I6 s2 N {cout<<'0'<! N7 f9 b5 B# l: f. Y) W$ \- O x=0;
6 ?1 ]8 {! k; z6 t% ^) _; D return true;
" `7 C* f7 p& n! w }8 T T0 w: S' w# Y- \" \8 F
else0 `) N* g: o' Z
{for(n=j;n- J* i0 H5 M1 \3 k9 O& C cout<# _& n; K" ]5 d; ?3 }. t8 G8 O x=m-j;
" q" R) s7 R# P3 A7 b& ~/ j cout<. e) J" r' h E return false;
$ N+ `! c& ~) @; G- d: m }4 c+ ?/ }( {, P. z. I/ m: O! b
}
: F! t# v" A9 m9 Jvoid Checkout::add()$ j2 U& r1 V, \. |
{
+ r( |" M$ e f$ Uint j=0;3 G5 d5 k0 r) q/ t7 W$ _* B. p
for(int i=length-x;i/ |* K3 O8 `( p: E" F
ax=bx[j++];* s; y3 {8 S! A; l7 Z
cout<<"发送的序列加上余数后变成:";
4 o: a9 G+ ~- K for(i=0;i" T( P4 S; W1 V+ {: |6 d
cout<;) Z$ w6 F4 e" |, p" t4 r
cout<- `1 n4 A# `6 W8 L; x
}& R9 N/ V7 Q5 W
void main()
m9 E# X0 `3 Y' E3 A$ N! b( j, F{ ' T4 d/ G' U. A. |6 O3 |
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"</ u3 ?+ ]4 C* F+ @6 C7 f cout<<"请输入发送数据比特序列:"<# E4 t9 F9 Q) z; d2 Y2 T$ D
Checkout test;
' a F8 D! f) N! [& q test.cxc();3 K" [1 @9 H3 f' O8 s
cout<<"余式比特序列是:";
) B7 ~' a$ w8 O( R test.qyu();& H+ R9 D2 D2 ]. n7 y% G( P
test.add();1 t# p! H/ b% x5 N% J K/ ^) U
cout<<"试试这次是否能被整除."<5 l; K0 k8 \9 o" `; U
cout<<"新余数是:";8 _. v7 R; ]) }9 B4 y6 C3 p' i6 x
if(test.qyu())1 e/ j) c6 n' m6 a! E+ c r
cout<<"已发送成功!"<" i" O9 V/ `& L& l else7 u0 q9 _7 d0 ?$ c
cout<<"未发送,失败!"<, E$ F- W' G2 Q4 R& [/ y# N
} |
|