该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
+ |$ u: w( s T! K. ?, {! I#include
% ]$ A7 i3 b& T7 X2 M/ k1 ^6 ]#include0 z" g' f% b, ?3 `7 D+ b
#include. z: F+ r4 s/ P# S O
#define CRC 5' I, L5 J9 j; ]$ ?
char data[5]={'1','1','0','0','1'};+ d1 b/ J* s+ U( y# q/ h
class Checkout0 v: L9 y0 e+ X
{
% Q7 P+ A I' yprivate:
8 }5 g* x5 Q- p, E1 e char ax[50];
9 m6 a! K; a& W2 o5 k$ A0 v char bx[4];
: S0 I6 o2 n6 d, W0 D7 B4 N int x;4 o: z3 b( j8 ]( ]
public:
' N9 c& f; q. x# `: _ int length;
1 P$ C9 c5 D6 e: O Checkout()1 F8 }0 {- a& S# p/ D+ N
{ ; @9 ?9 m A# ~2 v
cin>>ax;
! J! t/ D' L, b" S3 R. | length=strlen(ax);
/ A) P% x2 _" Y; Y3 P+ k }
1 V& g/ Q# o' p4 i- t9 ^- ?$ a' | void cxc();% R8 @- H9 G2 i5 L6 q8 c
bool qyu();
$ a% ~9 e) K* j) ], w void add();# M! M; o- r G) L( j
};
+ N" H# N% b* v) bvoid Checkout::cxc()- ]4 ~( e& l) s$ O; [
{
* _+ {7 d1 E1 L for(int i=0;i<4;i++){ F/ h6 o' Y' M( ^, w
ax[length+i]='0';
: @2 }$ G( ?; t/ |( b }
. `. h; y) e$ |8 G. r5 s1 D- m) f3 O}//将输入序列后加4个0
7 b6 `5 m @6 a( D2 Ebool Checkout::qyu()
, W! N7 q8 a/ N6 t" c{ h9 D% x9 m5 F3 c8 q9 P e
char c[5];
u' G) G: q2 a" v int i,j,n;
5 f+ n9 l. [: d. k% I! G b int m=5;, A% _+ {' C7 J: J) h
for(i=0;ax<i>=='0';i++); Z. ]' v8 Y2 t }9 I
if(i==length)8 p/ A2 z; q6 f) \7 M
{cout<<"余式是0"<<endl;
0 \" ?+ d7 z0 y# R( ~( s V cout<<"发送成功"<<endl;$ Z9 P# _; e: |3 C$ H4 T/ F
exit(0);% x4 K/ ^' [: ? _6 s* H W* f
}
! B$ u5 V8 V) b: ?- u$ l; K: selse{
. R* U. e& t0 `: B( F for(i=0;i<5;i++)
+ u$ u$ T `3 m9 X c<i>=ax<i>;, u$ ?2 i. { S
while(m==CRC)& k$ c/ z \0 f# I
{ for(j=0;j<CRC;j++)9 h$ x# D+ o1 t" N. f! ~
{
1 U0 c3 h" X) Q5 z% c* n if(c[j]==data[j])/ X; W0 M- b3 z( _: L: g2 S% A
c[j]='0';' C% A' s% Y) C& a% [$ A
else
8 \6 E+ T, w- L: K8 p& M6 L/ T c[j]='1';
3 \+ _8 M4 Q* n4 {/ M }
8 T* w+ L' B0 f for(j=0;c[j]=='0';j++);
! P' l6 A+ A/ |* D `0 n0 ^ n=j;/ c# C* P1 k; A9 F. @' S! d
for(m=0;m<CRC-n;m++)4 ? b5 P6 O0 y6 Y; H" s" Q9 ^
{: y4 b- {1 A" ^ W9 c% w1 x8 D% V3 S
c[m]=c[j];
* c' B: k6 O1 Z! ]- B j++;
/ G! @( O' K: i, I }; N# E1 N) H `" |& u1 z8 L- v0 n
while(i<length&&m<5)
' X( }1 u+ m# y, T% b7 f0 ? {: e% G, L5 H- R
c[m]=ax[i++];
$ l! m+ Y) O) v t m++; ; I; a4 z% z0 y& J
}+ B0 E4 L& |! @$ D6 _+ ]! ]
}5 _: |# s! S& O8 D3 C7 R
}" l n7 Q& y6 |: Z2 h
int k;% J) {" X c; [2 g2 {
for(k=0;k<m;k++)
; b6 a, y& v3 a8 b4 o* y bx[k]=c[k];
6 T3 K U6 m" D$ U0 N9 | s) d for(j=0;bx[j]=='0';j++);) j" |: w. f% o% x" n8 g
if(j==m)
- ^$ C4 m( X h( w/ @4 S' ~. U {cout<<'0'<<endl;* K" G8 z/ P2 v
x=0;0 q3 h- l2 C, I
return true;
# P0 B, P3 M5 l }# ^5 h& K8 ?/ M. d$ o6 r/ H' w
else
' o5 Y* T' P2 }8 ~ {for(n=j;n<m;n++)+ @) V0 b# O' I: w' G) ~; e; A" b
cout<<bx[n];
" M0 b. q6 A/ h$ v' l x=m-j;
1 q' X+ R; [5 x* n/ Z cout<<endl;$ C7 b8 ^" V( ` r7 K
return false;
0 [5 X Y, I* i$ e }
8 J* S( _8 N$ e- t2 J}3 U w. t3 y5 b7 Q k/ ]
void Checkout::add()( m$ i( o7 h* {5 a2 y* [8 X
{; J# Z- L0 w1 v! [) d E9 V" z/ F
int j=0;
2 e0 I) R% ?( @( H for(int i=length-x;i<length;i++)! N' s9 [* w5 E9 L0 U
ax<i>=bx[j++];( \- E4 b& P! `: S: W$ X6 a3 P3 F$ Z
cout<<"发送的序列加上余数后变成:";
4 d! ?& P m! J7 p for(i=0;i<length;i++)
S1 b. C4 @+ m" t, Q- Z" }. X cout<<ax<i>;
. h% y' w- y1 M4 l) Z8 ^ cout<<endl;
+ v' \' S) [3 q, l% T5 U}
( ]3 y# s. C/ h. H: ]void main()
% P; U) P& s7 J4 A{ # v" S N$ N# ^1 Y+ ^. @6 J
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl;
% Y6 N. A. l: ~# b5 Y. [ cout<<"请输入发送数据比特序列:"<<endl;; ` z& U \& R* ]6 Y) t
Checkout test;
1 P. G5 S4 l' I7 y Q2 V, _- f test.cxc();# |6 U. z( i# C1 O1 r
cout<<"余式比特序列是:";3 R/ R6 r5 e3 N* r, m
test.qyu();
1 ~, u: a, Y6 _; M% p test.add();
- q6 ] z9 h r0 y8 P& u cout<<"试试这次是否能被整除."<<endl;$ B9 V) B K( G) O
cout<<"新余数是:";
$ T7 f) K7 [, p" }, e) A1 S4 O& v if(test.qyu())* l$ ]8 I+ U1 D# E! P
cout<<"已发送成功!"<<endl;6 X+ S1 r( O3 w) y2 r: R" y
else# ~/ J/ f, J& i4 v" d% Q/ _* W0 l
cout<<"未发送,失败!"<<endl;
0 t) j; r0 v/ W} |
|