该用户从未签到
|
谁能帮我把这个CRC校验编程实现啊(就是换个编法)??万分感谢,帮我顶啊
8 d, _. F, r: _8 s/ b. B#include<IOSTREAM.H>0 X n4 m1 ^7 O/ v' c0 v
#include<STDLIB.H>% E% P! R8 ?" T5 J
#include<STRING.H>
/ I/ S6 S% P% a0 Q/ U8 ]#define CRC 56 [4 B1 l: t) \
char data[5]={'1','1','0','0','1'};
# B( `3 R! u( J5 i8 V- t8 ]' ~class Checkout+ ~" h4 g& ?+ C8 X7 |
{
7 X# n8 ^- @& D% x7 \: d9 I( kprivate:
1 @" X. X* I( ]8 `, |5 x7 zchar ax[50];
9 v6 a" V4 c; O& p2 e: R! lchar bx[4];
- g4 i- _8 }8 E. ]3 J# h/ cint x;
2 w: o. f' n4 t- f$ rpublic:
6 M8 B, J1 O: K! j& b' zint length;1 v2 Q4 C8 u' d& V, v7 J. j4 `
Checkout()
1 A( s9 x8 I' C% b* F{ 7 j) v. ?; } E
cin>>ax;
- W* w3 I/ W2 ^" s5 G0 U j% D length=strlen(ax);
0 V3 r# C8 ]( d, m5 g}
% Y n X+ j. m8 J9 Qvoid cxc();" Q- m7 C4 B* P* {" |1 R
bool qyu();! l# i# p3 \' I# D3 k- X9 N
void add();. m4 S4 @9 B7 U' Z# Y5 I0 u L
};
% U) c! g5 e! K: g* l) ~- Avoid Checkout::cxc()/ h8 s) f0 K: P* `+ l1 e5 l9 Q
{
6 k3 R; ~/ u# g% y2 F! r h9 {for(int i=0;i<4;i++){0 P! d4 c: y# Y3 I. g, N
ax[length+i]='0';
! c4 M: _% O9 L( O8 z+ U}. m( k( L* ?% E; E7 c8 R2 D
}//将输入序列后加4个0$ ?8 p V; r; V5 _0 X4 y! H
bool Checkout::qyu()
# o( n7 G( I9 F{; o1 j# N6 g) C+ r: u2 t) p4 p
char c[5];
3 V1 l5 S! Q7 P/ N7 Q+ Cint i,j,n; {# Y& G, R2 u3 G
int m=5;
! E. i+ j9 a# }- E& T8 _for(i=0;ax=='0';i++);- x9 Z/ I# d8 L: t& s
if(i==length)4 j9 Q& V6 ]. N" F1 o3 ~1 j2 v% F
{cout<<"余式是0"<<ENDL;. ~# [' m' z5 b0 v1 y; O; a% h
cout<<"发送成功"<<ENDL;
8 L+ s8 O( e* U/ t' d3 X exit(0);6 S& c0 o) e5 G/ V" o4 O
}
# H f. D3 L5 p* c9 ~else{
' i; L, P2 x2 q$ q+ O! |( Tfor(i=0;i<5;i++)4 ^8 t r7 S" M% Y+ W9 k
c=ax;
$ b1 ^- `+ t ~while(m==CRC)8 V) {* b# x: j4 z5 c
{ for(j=0;j<CRC;J++)( J$ e/ a6 C/ c0 M* l( _- j
{
0 b. j" X! Q: e5 i. @) L if(c[j]==data[j])( s! _4 \$ X5 Z p
c[j]='0';! O3 Y" Y+ h9 T |6 }6 E2 f( Y+ @
else
1 X' ^$ \6 v6 u; V' ]0 r5 K c[j]='1';
. C- \2 J! G# {7 D" x U! q. @ }
, M5 {( J7 Y- E' H for(j=0;c[j]=='0';j++);0 F: J: t; o4 x( D! k
n=j;$ W, i2 }1 k2 W. g4 e
for(m=0;m<CRC-N;M++)
$ @( T7 \+ b9 i+ d% s+ Z {4 [' B# y& V9 M6 F7 Z
c[m]=c[j];
( v/ B9 a! G z j++;
; a. L* O4 v' g }& o7 Y" }# j [+ ^
while(i<LENGTH&&M<5)% L7 A9 _: Z1 k7 W: m6 ^
{
# c. n7 R5 n S7 o1 v+ Z c[m]=ax[i++];
9 ~0 {- J i* l {+ d( V3 g m++;
, _% k9 m# j+ U" T$ s+ I }
- I6 o& K" R4 v9 n3 G}
6 @/ X z0 ~# g5 ^) j}8 {% m, n5 p3 x) b2 \7 a
int k;
7 E Q) @+ V1 W5 dfor(k=0;k<M;K++)3 U! w9 |6 l" a% v$ Y8 m J
bx[k]=c[k];3 G. m7 }0 `- e. f' ~1 {% c) p
for(j=0;bx[j]=='0';j++);3 l7 J3 F: ?) M' V! ^
if(j==m)" s. J6 k A3 a2 {2 E- O" G. L- g
{cout<<'0'<<ENDL;
' _; i* M& W* D0 B x=0;1 u( C1 [; F3 J0 B( p+ L$ F: _! |
return true;. u4 j6 T3 A/ k/ e; b2 M
}
. D4 ~) z! u- H9 T! r3 i% K else, v% f- \4 K( P# @7 t5 X5 H
{for(n=j;n<M;N++)7 E5 {! J* q/ {
cout<<BX[N];
9 j0 v2 E1 {; l3 k! \6 F x=m-j;$ W6 \; W# Z2 T. C1 n+ `3 T% h. g
cout<<ENDL;0 g9 @ _1 V1 H' F
return false;5 ~3 l$ Y0 S7 [! b' q u
}; t* f# K9 x7 u- J
}
& f+ V6 I$ d% |/ W8 Lvoid Checkout::add()
7 [* H5 u4 }1 E, [' @{
8 F0 K, x! C# R! P. A- D8 x* Uint j=0;- E0 [" q8 d, G/ n* Z2 u
for(int i=length-x;i<LENGTH;I++)* \1 Q, d0 O9 A% f' T: R
ax=bx[j++];
+ C: H O% E- T! s$ ` cout<<"发送的序列加上余数后变成:";0 w2 P3 \# V( U/ G
for(i=0;i<LENGTH;I++)! O6 w- Q5 b+ D0 Q7 j6 T7 I
cout<<AX[I];
# l/ X! [. G0 L2 `' m3 K9 U0 | cout<<ENDL;
, [# `/ ]) L x$ y- X}# t0 o+ x1 y2 D& |; {: M; g7 m" x6 c
void main()
) P8 z \' e) D# L9 |& X+ e{ ' k7 T: P+ R# I$ r
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<ENDL; * p! ]1 g v1 h7 ?; Q, R
cout<<"请输入发送数据比特序列:"<<ENDL;& e- r+ M) M0 X! w
Checkout test;% J5 a6 K$ |4 ~* t" {8 E
test.cxc();% i& g2 m6 H- H8 i9 c# |5 \
cout<<"余式比特序列是:";4 k, q1 F$ J# ^9 @7 U; K4 l0 K; M' y
test.qyu();4 r5 r& [3 T. w2 M
test.add();3 t+ S4 i! [' x- h. s
cout<<"试试这次是否能被整除."<<ENDL;
4 u) L$ F* Y) L) G cout<<"新余数是:";
; |) j" n3 a' i) o% q5 q$ z- n if(test.qyu()); `' n @2 K0 F7 g
cout<<"已发送成功!"<<ENDL;
+ B- y! Q1 Y3 a, u else3 U3 W# i/ g7 U/ ?
cout<<"未发送,失败!"<<ENDL;9 o% `/ n @& `. u# b8 \
}
% }0 u$ Q: N/ q4 _1 ~6 h[此贴子已经被作者于2005-6-15 20:46:33编辑过] ; h2 u4 U" O$ V" Q2 t0 L4 J
|
|