该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
% ?9 A6 P3 u& z( D& N#include# C Z7 g0 j1 P V0 Z5 p
#include
" {' m O- H }6 D) R#include$ Q0 x7 N/ I- M( y
#define CRC 58 Z& @3 x" D" [5 O4 P! a
char data[5]={'1','1','0','0','1'};+ p2 J3 U2 y. o- C) j+ w
class Checkout! X8 _' S& U5 ^* F: i5 z1 s
{* |! |9 z* ?/ V3 G/ h/ I
private:
& J# g6 y1 F$ A: k2 V% C char ax[50];
% f9 ~; v7 I% d; q' ^: h char bx[4];4 z9 R% Q/ `4 ?' W6 S
int x;$ o3 o" b, R% k8 l8 P
public:9 g& ^; ~4 v0 Z+ A* \
int length;0 J. k5 }4 d" h4 _- E
Checkout()5 c' d& g) s, C' e
{
% e- j! d" a) G# | cin>>ax;9 t; y" \* O# I, B
length=strlen(ax);
K# o) }/ S7 O1 |- g }6 M+ ]# I' E) Q% @( ?( s
void cxc();! u3 P% h0 e) r" j# Q/ v( o& B
bool qyu();1 P0 a+ W% ~5 \- y! d7 V* T% y0 G9 J
void add();/ j( f& T3 I2 S# `* E
};
- e! S- q y6 Q9 Qvoid Checkout::cxc()' b( r! s) M& p) p- o# w2 R
{
2 l" H* i* i6 V" p for(int i=0;i<4;i++){& g, k+ |$ S0 c$ F+ [' ^, S
ax[length+i]='0';
7 F" M; g& _( L# A6 x9 L! @ }
, x) s/ p- i8 {$ L1 h- I}//将输入序列后加4个0- P6 p: S& H* Z% _( d/ _, g* e3 q
bool Checkout::qyu()6 L0 x2 m2 U1 A
{
) Z, {( C4 \' Y7 Q) Y& K char c[5];
! P( |& ~$ x9 l; T2 F+ B int i,j,n;
" o6 @1 `) q7 }8 G) v int m=5;
i8 w$ U9 W5 O7 Z& X for(i=0;ax<i>=='0';i++);! E! t) S0 \* |5 Y
if(i==length)
, ^& ~+ t' I3 @' N) ? {cout<<"余式是0"<<endl;
w' W; C: b* p& P cout<<"发送成功"<<endl;
3 h# Z, f9 r* V# m4 _ exit(0);; W7 k) p, X5 n3 t/ @
}8 C6 T/ c; z2 m* c. S; _4 R+ ]
else{
5 H, L2 u. B" U3 n for(i=0;i<5;i++)9 |& w8 z- W# A( F! i# n! d
c<i>=ax<i>;$ Z0 E' Y! i) ^$ y, j
while(m==CRC)
, B4 ^, H' z% w/ U1 p! q { for(j=0;j<CRC;j++)9 f7 K1 ?# s1 A" [
{ 3 i) w7 b: D2 P
if(c[j]==data[j])
7 S8 q( x# i: p: Q; K. ]) s c[j]='0';2 m: I4 D9 G* i) M. R* a
else
" @# d" M8 [. g' Z c[j]='1';8 U, ]1 E) k6 i' t# A1 Z! q
}6 ^6 r* G& W( C3 w+ y- ?
for(j=0;c[j]=='0';j++);
( E R, {4 Q+ R# e& Y' e5 N n=j;
u$ U7 ^7 C* k+ E9 C for(m=0;m<CRC-n;m++)
5 ^7 F* n8 ` c! F" M {
* o( x2 F7 O7 f9 Y$ q; D c[m]=c[j];1 o I0 x2 d) H* h* A
j++;" N2 P: J9 g) o# o2 I$ \+ O
}
6 l/ Y* A$ n2 |9 e while(i<length&&m<5)4 a6 H$ x7 @! C+ A
{3 }4 C, t) x2 L5 `. `8 }7 W8 j' k
c[m]=ax[i++];
8 E8 g3 S/ c3 f$ b Q" F5 _. T m++; ( |- p' v0 D1 ]
}* ~+ n8 t. g5 q/ ^; {! L: Q
}
( g r1 P5 S2 A$ _% q}
8 M, `5 l7 ^- f int k;8 H8 f; ^3 M- ~3 O: u( a
for(k=0;k<m;k++)% `9 K. r/ e/ z3 E `+ O8 l
bx[k]=c[k];
0 `/ h( o+ X% e for(j=0;bx[j]=='0';j++);( {+ Y0 I3 y+ L/ A
if(j==m)
2 E: b, q. J9 N2 C {cout<<'0'<<endl;
+ A; a/ M* @5 u0 ~( ^) S. ^ x=0;' L' g8 K4 `, n& N% J) Y
return true;
Q# Z) a2 f% y$ D6 G \9 T& v8 k' z }0 J$ Z+ E' ~5 F- ]- m% Z
else
: q q1 y1 y) y/ y( H1 z9 ] {for(n=j;n<m;n++)
5 H& c2 E& L& L. N: @% W cout<<bx[n];4 r' L9 O5 ^2 [: c2 x
x=m-j;
! B9 V, n* h$ o' o: D, B cout<<endl;5 V1 U% S& H# P* N0 f9 [
return false;# G* W) Z" ?2 |. E: j9 T
}) `& @" J: ~( k; R# E0 z" m
}
6 I2 \8 i9 S) t3 C& O. ]" _- |void Checkout::add()6 G( a& A! l# H9 S3 P$ C" z* Y
{
2 p0 O* l" x& _/ y* ^6 t# x4 Aint j=0;
" {1 b& k9 V1 O" R F1 S for(int i=length-x;i<length;i++)4 Y& r; m3 q4 b& t* n9 g+ h
ax<i>=bx[j++];, q0 u( F, O# _ ~7 U8 U8 K' M
cout<<"发送的序列加上余数后变成:";, u* u; d) M" v* d. D2 E, z7 u$ E [
for(i=0;i<length;i++)1 u/ f% ~% _- x3 t* Q3 F4 H
cout<<ax<i>;0 [' W' f: ^( I Q) j
cout<<endl;
/ U: n/ D" p% P: A}" U2 p9 g; x2 C6 s% d- `
void main()! `: o3 L: t/ k- s; z
{
. D2 Z4 W* k1 @8 U cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; # `, P) b6 o: {% ~. i7 C
cout<<"请输入发送数据比特序列:"<<endl;: y) I( K( g7 ^" J6 y
Checkout test;* D! S+ a/ @4 p' i) m4 ~% R
test.cxc();
2 ?7 g: Z m+ V) z- U cout<<"余式比特序列是:";
2 y+ r$ }$ a! F1 o. C test.qyu();' F: L; W) B o; p$ V. ]) o3 P/ E
test.add();5 W# b6 ?# B( [4 D& W9 Y
cout<<"试试这次是否能被整除."<<endl;
7 a, q$ ~; m8 v cout<<"新余数是:";
( ?" K" j) J8 ~% L5 l5 V if(test.qyu())
* s( f, I# N9 V" E* d" F cout<<"已发送成功!"<<endl;7 Y1 L7 Y' L$ F, C- _9 G
else
( ]9 ]& T c% N7 y B3 H! W cout<<"未发送,失败!"<<endl;4 k1 d, x' Y1 u5 u
} |
|