该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
" u' c& ~+ p* Q( s) i- X9 `9 Q#include
~0 \# D7 I3 T- U W* p#include: K0 G/ _1 d, ^3 A
#include5 k" w8 k6 L7 V# @9 Z4 X
#define CRC 5
8 F: h! s' C( K3 zchar data[5]={'1','1','0','0','1'};$ Z' k' W H _* p
class Checkout" i0 ]; N( c/ s) B& l1 b. s' W
{
0 O/ T s! N# eprivate:6 P5 F3 p4 _7 W/ ~% l; d
char ax[50];7 o8 i' r: R1 e% C4 q+ x- ^9 M
char bx[4];
) E8 S( s( W' o. L9 X4 ^ int x;. [* {/ C9 b& r( K% F- z) `" k$ d
public:8 A+ t8 o+ Z4 [% T
int length;4 t! [' u: v* m
Checkout()2 F6 J" Q k- [: h% p: l O4 t/ Y
{ 5 I' E2 O: v3 r, l6 x
cin>>ax;& ^( H( p* D6 n, O- ~
length=strlen(ax);
6 e! f4 @5 P2 X. A }# `) t- U, X" D, s. r, B
void cxc();
1 j* W$ H4 L/ X& Q% W1 R7 X' u' K bool qyu();$ U+ A3 `' r/ y5 s. { k
void add();7 @( |3 u, b5 S$ o" g
};
" v: L, o% W [, p6 Dvoid Checkout::cxc()
4 {! d5 X! g6 d: p{
/ H j5 R8 E; G# G: a: h for(int i=0;i<4;i++){6 D1 k2 e/ w+ @( R6 B* C
ax[length+i]='0';
, H1 {/ D# k6 `' b. u }
8 ?6 n4 a _* P3 f$ p6 I}//将输入序列后加4个0
& e8 N. t% e$ A2 a# Abool Checkout::qyu()
' O Y2 U8 r2 i3 b* ?5 M& q4 l{# g5 g$ y9 w3 [' a0 a+ U; g* ?. w
char c[5];
8 r. S) v% i5 N! Y int i,j,n;
. y0 E, r+ T1 c! R( P4 } int m=5;4 r* ^0 l4 B |' M6 Q; \0 C. @
for(i=0;ax<i>=='0';i++);
/ c8 E% b" m2 c$ c if(i==length)" D1 g B6 _6 _
{cout<<"余式是0"<<endl;* Z% u* |: q9 u* ~* Y9 Z w1 z
cout<<"发送成功"<<endl;
4 `$ R. ?: J- M2 e exit(0);
2 Y/ \* v9 l' E0 C2 f }2 m! x1 u6 E* |- G
else{
) H9 w+ Q1 g: V! b. H for(i=0;i<5;i++)
7 j- _0 H# M+ x+ D( y2 \; P c<i>=ax<i>; H% P: Y: d3 ~+ \2 B4 i& R' J
while(m==CRC)
: o2 V3 n6 U) V: \- V9 @ { for(j=0;j<CRC;j++)% ?2 S& Q/ ?! `3 [9 {) l+ I3 F1 B
{ 9 c. s" c8 W# z4 U/ W9 T5 t; B$ Z0 L* Y
if(c[j]==data[j])
( {# Z8 } M" i6 |0 C' } c[j]='0';8 d0 r# e4 f9 q) {6 v( y
else
1 z' Y& R/ j4 l* Y( ] c[j]='1';
/ U, u6 ~! J1 W- q3 V' t" I3 t }
' \( q9 e3 I' s3 Z) D1 V for(j=0;c[j]=='0';j++);
7 j! W, B; C, L1 S% n n=j;) f# |" |& X6 _( E T$ S1 C
for(m=0;m<CRC-n;m++)
: V! o. f; U4 \. t. O {
0 L; H+ ^" o# A; Q. A2 h c[m]=c[j];6 o3 B& W; ^6 z" `, o
j++;
- r# D1 {4 r3 E! g9 ~% E }
5 u- @0 Z) N# n while(i<length&&m<5)9 N+ r: x; m4 f6 @+ L( Y
{
! J4 p! S, ~2 e5 }8 D c[m]=ax[i++];
) } U( z+ T% Y. D5 M& @. y m++; C8 Z& \4 i, n0 J, T8 G
}0 ~3 M" Q5 T) Q6 f- K, ?: S
}+ [) s- E7 z# W- ~; K
}2 t' Z4 |/ `# `3 Z R4 Y
int k;
8 F- y$ Z3 z% H8 {/ A2 p for(k=0;k<m;k++)
& h1 G0 Q1 q& \( V$ h! ` bx[k]=c[k];9 F& C" A p) L& A
for(j=0;bx[j]=='0';j++);
$ b3 @& D6 a8 u6 j4 F if(j==m)
/ Z$ p, \! `. X {cout<<'0'<<endl;
; _% K4 {7 W7 t x=0;
$ l% V4 V6 U- @$ j6 a return true;
4 K! D F3 p: G6 `( K# I }
. b! O5 l6 `& {/ Z else. p1 C% T5 @! Y. C% w6 u* S+ s
{for(n=j;n<m;n++); X& f0 L8 M( C# m
cout<<bx[n];* g: Q/ b: l5 e" f/ a' n( a
x=m-j;' z2 \2 Q' w) i$ y' c& u" K' b M
cout<<endl;2 v! `+ f. r3 I0 H( l
return false;9 A5 `1 o5 k8 g3 p0 Q
}
" Y7 g; x; X) d% R, A3 p}3 I! @( n7 h# i. Y$ K$ z
void Checkout::add()
8 e1 P( O: O; \5 e% r- {{4 D K, |4 q3 j. X$ C: |" _
int j=0;
) q# `7 ^( X8 R2 K for(int i=length-x;i<length;i++)
+ |; L+ q- ]4 y2 h ax<i>=bx[j++];
; }, A4 s7 C+ s8 A8 r, q2 w3 z* S cout<<"发送的序列加上余数后变成:";' _. o, y* U4 t! p6 |, P
for(i=0;i<length;i++)
/ D* a1 C( q' z! ]8 t$ V7 R cout<<ax<i>;, Q6 M4 `1 ^3 z3 I
cout<<endl;; ?. S S7 s5 R$ D
}% X2 U* K2 q1 f7 \* R; W; V
void main()
- z( w" M; s! I8 C% I{
3 o" J% k% o) j6 A8 T cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; ( |3 q& K3 G" {+ A8 B/ k
cout<<"请输入发送数据比特序列:"<<endl;
+ B$ d# e# L' n" b: ^* |, s Checkout test;
$ v1 L$ R0 |# F$ n9 s7 ]2 | test.cxc();* f" S! W% J2 j8 R5 S$ G6 F
cout<<"余式比特序列是:";
! ^/ J& m+ x) a1 w test.qyu();
" h1 `% T, @2 d1 j- A: m' X test.add();
+ _% {: H. S: @ cout<<"试试这次是否能被整除."<<endl; O3 e6 G! J3 P
cout<<"新余数是:";
7 o) U; L% G- D# f3 P4 D if(test.qyu())
2 ~$ f! \( g1 p3 R) Q cout<<"已发送成功!"<<endl;7 W1 T( {. G" m- @8 u) b( L, X
else u+ I+ N A+ Y9 g V
cout<<"未发送,失败!"<<endl;; K' P5 L# s" ?7 g/ Z3 d
} |
|