该用户从未签到
|
有谁能帮我把CRC算法实现换个编法啊??帮忙啊,急用. q" w9 ~3 R E
#include1 h6 q) }8 K6 Q$ L1 G4 O8 p
#include: t; l8 Z8 E) ]! B3 n! B$ m
#include
4 r9 s2 K: j2 @4 ?6 c2 q# i9 H#define CRC 5
6 Q- g; x6 m* W" Schar data[5]={'1','1','0','0','1'};+ V8 F* r* J R+ H; E
class Checkout
3 H; s; U& j, f% x! q2 a; r' J# {{
( o+ K- }6 E6 E! p( X& k; i& fprivate:
1 ]5 I0 x7 j" P% Q char ax[50];( E& y# D9 S. P9 B$ z
char bx[4];/ ]5 X8 i9 h/ k/ [- Z# a+ T
int x; p! e- {5 D$ W
public:
& z. Q8 v# k5 z) I9 o- W7 N int length;
* y5 ^: u9 [, _. w+ U Checkout(). S# `# r) N4 \! P9 a
{
8 Q& U8 K! R- `8 D) s% ~8 J cin>>ax;% k5 L C2 S, o6 j! |# |
length=strlen(ax);
* H- v$ w; M. n) `; K- W }
( z' d! w/ C$ I. z( |* X* N) b void cxc();8 W7 W; I8 L l4 V' I/ l/ L) q" A
bool qyu();
) W9 v- h' S) M2 [/ k void add();- x( o- Q5 p5 G0 y+ w7 _8 {
};9 z3 c& h+ c2 ]" o( M" W
void Checkout::cxc()3 Y3 x7 Y( m5 D- m5 ]
{
% P* |1 R& r. o/ c' l8 @ for(int i=0;i<4;i++){
1 U, o6 F# Q3 L; P8 \. x9 O& Z ax[length+i]='0';4 }6 q( z6 J$ @/ S
}+ J! P. e! t; |5 K6 C+ p% H1 U) f
}//将输入序列后加4个0
& s/ \) Q; c# [/ ?0 Z5 gbool Checkout::qyu()
u; y- T$ S0 U6 g# a( c# ^{
. ?6 w' t+ E$ e3 n char c[5];
' d, J; O' D$ s; b. a int i,j,n;- @' \# b4 v' b9 ^/ n; u
int m=5;
1 K# y# [6 h2 E for(i=0;ax=='0';i++);
% F5 F$ }! r. ~ if(i==length)6 a9 q" \7 z$ u3 u' F
{cout<<"余式是0"<+ t$ @ X2 J/ Y- X; ^ cout<<"发送成功"<1 t" Y" a4 _ }/ W# V5 k5 Q, U4 X
exit(0);
/ G; W% A0 M" D/ g# y$ S: I }8 i, I( q- y, T3 F: I, S( X
else{
: I! U, w- C. Q9 N& @/ V7 t3 U for(i=0;i<5;i++)
?' E, n: _# @$ @ c=ax;" i$ w9 k3 s; M& @% h8 K$ i
while(m==CRC)
4 b' n6 `3 [8 G { for(j=0;j# |& I% ^. A2 A( {( S: E { ( z: t% I9 v' l3 P' u6 c0 J! J2 {( G
if(c[j]==data[j])
. r6 ~, S f0 h# L( c( [% W c[j]='0';' M4 T; w3 ~/ |0 `5 [! z: ^
else
( a: ~ |$ {6 D* M c[j]='1';
8 u& `' e5 u" u5 d& |% J5 I" { } |- F& j- N b* X
for(j=0;c[j]=='0';j++);
4 F C: F) S/ I Z }9 D U n=j;2 h4 U* k4 d& m2 W
for(m=0;m6 v0 [' y6 d% `8 h5 l* [5 ?$ M
{
1 U3 `- P k0 X4 T. _% R c[m]=c[j];3 J3 P1 n* P$ \% E6 X2 O# ?7 X
j++;
/ p. N! C* V; l }
3 ~9 F+ T8 ?( S) r* r' Q while(i. w# t# z+ \) f5 a7 } w& {! k
{! Y9 ?. R7 J( e
c[m]=ax[i++]; / M) E7 q1 f3 n9 x5 Y9 C
m++;
* Z" C1 m3 _& u& F }
/ E N7 u; A; L5 ` }
) T- b \" h, w. c# [. L% I! _}1 l& z- a. G: q/ z1 ?
int k;
) N1 U& L/ R H& M3 p for(k=0;k0 e: q! X! |9 }/ d& U
bx[k]=c[k];5 v* U3 q9 ~$ Q' |0 D$ ]
for(j=0;bx[j]=='0';j++);
2 t3 m, ~- _4 [/ ]/ U1 s. a if(j==m)
j) R6 s' L0 } g# i {cout<<'0'<; ^( f# b1 {: L3 v x=0;
' G* S$ \4 \ S: g | return true;
. g6 |3 Y1 V! G% i }) Z: d) F/ j7 l) f# _
else
! m6 h4 _. x% ]% W* F v5 P {for(n=j;n$ U$ o z3 u/ j: o cout<* o5 Y' s8 H; y# V/ E
x=m-j;
6 E6 S9 z* |, n" K4 i- p cout<% H5 ^$ A# n7 t K
return false;' {3 Y0 u/ ]: i4 q) C% `
}: o1 G! w, ?& V% _2 N' c0 k
}
) F" Z" E! {( F. w3 y* q. P4 _void Checkout::add()( N+ R* U: I1 m4 \' Z
{
6 q& p6 \* g, W& x" {int j=0;
% F8 R4 v/ C& }& E. k0 c" @ for(int i=length-x;i! x# e6 y; i( G7 @+ V: b ax=bx[j++];3 H( k, }# z3 ?! u( {1 y: W5 Z
cout<<"发送的序列加上余数后变成:";% [( S6 ?+ c! C% S2 j" |" K; i, V
for(i=0;i/ ?; A1 W7 F$ R; ~% K/ W3 ]' V. _ cout<;
a3 N2 B& `: A& Y5 { cout<" x$ J- R6 h$ q2 y}
9 z3 E6 f, ^) u+ w* A% l5 gvoid main()7 A( l* Y; l" e
{ * y# R( a3 R: g3 i' h
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<" p$ C# H2 `: |
cout<<"请输入发送数据比特序列:"<* o$ @6 N0 a# Z" v
Checkout test;0 d! H3 ~8 W$ N0 [5 C5 ^
test.cxc();
" W' g, l0 r) [0 K. {. Q cout<<"余式比特序列是:";
i5 r" T# _. O8 I L test.qyu();
0 q' z' C) H3 u' A: l: I( J& w test.add();
% q- B. H5 k$ u, E cout<<"试试这次是否能被整除."<- x! C. u1 H, b
cout<<"新余数是:";( W4 \7 D8 i' K/ W
if(test.qyu())
U/ r1 Z. U6 Q$ w1 w3 P cout<<"已发送成功!"<" i- f% p i# ]" ^, e else
r% i7 \5 t4 ?6 ^' D9 F4 \6 { cout<<"未发送,失败!"<1 i" w/ e! R4 H2 h} |
|