该用户从未签到
|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用' C3 {5 ~- H% f, f! ~! I
#include
6 f- a+ ^" r. J$ j+ e- L#include9 H, [, y4 T3 k/ W/ j
#include6 w# b- [$ _7 n' L7 \. d
#define CRC 5
" f* K, d8 G5 I9 `" e; [char data[5]={'1','1','0','0','1'};/ @' ?3 ~9 o' w. H/ f+ e2 k, N
class Checkout
; S4 {, M5 \. P{* j: o& P: j! M" N# Z, F
private:+ T3 z& [! z, P; \3 q
char ax[50];% w) U6 E6 g$ \
char bx[4];
& |& ^- k2 ?5 o. a0 } g int x;
- G" S* f3 T; H2 J |3 ]: Ppublic:% G' v& A! | T3 ` @- u3 X+ {
int length;0 m% ]+ C% B& Q& _
Checkout()2 J1 F i0 s1 \0 J8 X' }
{ & v( n! ~4 I0 s2 t
cin>>ax;
) k+ R; D5 r. [3 k! }. k; G length=strlen(ax);
X6 Z8 }0 Q _7 C$ u' q! f, f/ U }
# W) W# S7 S9 q7 ^8 f: c2 B" i( i! B void cxc();
; a% x1 C/ V/ ?1 {' D6 q, E bool qyu();
" W& F7 C& A5 q, ?, k void add();
" p2 S$ }/ w4 A# O) w6 `};
8 h8 e! l9 p) l2 G! ]void Checkout::cxc()
6 {7 ~0 o, p9 U1 ~{
8 t" X; q3 N; e, z4 T! S7 e+ K for(int i=0;i<4;i++){
, F+ n" E) z: R7 D+ e5 C! p8 N1 f6 P ax[length+i]='0';% U) p+ M2 X0 V6 K4 e$ v5 c: q' N& J* r
}
4 R, Q% N4 ~% L) G- ^" F5 y1 a. T}//将输入序列后加4个09 ~! D3 D8 u `, \; D+ u
bool Checkout::qyu()
% l8 r8 z* w2 ]! q{
: Q, {, a. m& `0 T char c[5];
! G$ b" Z5 [! e: Z. e int i,j,n;
' y6 U6 k' G1 x9 |6 X3 Q/ \ int m=5;) l- [) {; \5 G% i# I; z
for(i=0;ax=='0';i++);! Q3 Y7 T" N+ K& N& ?, {
if(i==length)8 j$ \; t0 ~6 F# ?1 @/ h; S- c
{cout<<"余式是0"<" X3 ~2 }& p2 ]7 I cout<<"发送成功"<0 D- _* t# i* ~" d7 g4 y7 S, K7 p exit(0);1 {: r5 ]* Y; j3 y% W/ K3 d
}
$ A" A6 O1 f( ^* T n0 ?5 telse{
' u6 J. q; Q! I% `) X2 V. `2 _ for(i=0;i<5;i++)
# \+ r2 K5 z, J" ?* {3 x: T. D3 a8 X c=ax;7 P8 I& Q+ Y1 E; i
while(m==CRC)
% C @7 l! U3 T- _4 s { for(j=0;j* Z! S8 y! K# H- l/ X: A { : X. h! k. b9 z3 q0 D& H
if(c[j]==data[j])
x* a9 C- o S# s8 u c[j]='0';
: P( x) ]* H2 ]; V else
1 ~( k" t$ }4 k! u$ |1 } c[j]='1';. b# J) T: o) ]' l t0 B" \6 n
}" h0 `0 `+ n* N
for(j=0;c[j]=='0';j++);
3 l2 T' b8 Y# u u/ ^' V n=j;
' {1 q7 I; a" R1 B( Q" w3 | for(m=0;m! A+ ~6 m0 w% r- ?# `% L
{
; A. t4 k* p+ t c[m]=c[j];# k2 c: a: q- E5 T5 s
j++;/ C5 e2 Y2 @. s( D9 F$ X' E
}
9 T7 ?- h6 c+ X1 A( |- { while(i* S4 o( |3 v/ o6 R$ J; f- R1 R
{0 j$ i9 J2 T; A2 |
c[m]=ax[i++];
& \2 i- Z" O" r& O1 O y m++;
4 ~" p9 X% A% ] p( J0 P5 S }2 C3 G1 ?, k7 j$ R2 u2 w: F
}# F4 X( w* q3 ^4 z0 L t* }; P
}
# _- _# S/ j' ^ int k;
f4 d2 o0 H5 p; [8 l for(k=0;k3 \3 d! F9 m8 \8 C/ ]( w% N# s7 v/ g bx[k]=c[k];
6 e: s0 m. _7 U' W for(j=0;bx[j]=='0';j++);) R, {5 R+ C0 E+ z9 U5 i
if(j==m); Z9 H: ?$ j) H, N
{cout<<'0'<: \! E1 ^1 q: t3 [4 t x=0;6 w& ?2 \6 y" [% R. g! B
return true;' K& a/ p* r( ]- t! J
}4 c# J2 z2 p: y, d
else
6 r0 m' h7 f) ?' A( L. d9 b {for(n=j;n9 b# @: O4 J L4 g+ j cout<% o& ]( h8 q* r9 _2 d7 N, f* ?. C
x=m-j;
0 q5 v9 q4 [ n+ \* W. C cout<8 V' z" C5 `1 U return false;1 ?0 Z2 F/ \% z, S& f
}2 l, g& D5 {7 O' a% d/ j6 C- L1 ^
}6 G$ Q5 x. @5 r+ H/ K2 _
void Checkout::add()- h* X K( `3 Y) O& n+ D/ X
{" P: x" O- B S8 m L: F! |: t
int j=0;# t* i# v# p( }) x# I7 S
for(int i=length-x;i& L0 L+ A$ u8 b, y2 X- O/ @$ `
ax=bx[j++];
5 i% U# W3 \, M cout<<"发送的序列加上余数后变成:";
8 h/ R) e! t$ T' I: c2 e for(i=0;i6 u, h. o% Y( [$ E
cout<;
) ^8 t7 c- \' w+ [. l cout<. S( Z5 ^( ~( y}
- D m( o& I. W" w7 o& q% {void main()
7 P9 }' Z. I* _' I2 \; b8 _{
5 r: W; a8 B) ?* E) A: E cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"< W/ I& R S: r8 ?( ^0 D. @ cout<<"请输入发送数据比特序列:"<- j; ]4 V- N; S% C3 O8 {% S
Checkout test;1 U2 U9 p, a" O2 Y; V
test.cxc();8 o7 d2 U8 |# N, H, O
cout<<"余式比特序列是:";4 J/ x1 U# B- y4 V5 d: B1 q
test.qyu();
9 C/ j T) J# [. |; W- F7 h test.add();0 N: y# U* M& M( k# h& Q
cout<<"试试这次是否能被整除."<5 {* j6 s- @* ?2 x cout<<"新余数是:";
$ [& z1 D+ W5 G5 J if(test.qyu())
( k5 |7 S! Z# i0 Y( v cout<<"已发送成功!"<1 Y# p& {6 w0 ^7 ^% y else1 H4 L' N& H" K' d+ k
cout<<"未发送,失败!"<# W* @; Q) T* @; C; R} |
|