|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊
' ~; T7 }2 k. r#include
9 @& ~2 ?, v) j#include
2 C; ?# D# o8 b% ~' g. l, b#include
4 F5 I# q% H% h% @8 w B#define CRC 5
; j; |/ U7 w A- O; q% rchar data[5]={'1','1','0','0','1'};+ h1 l' B0 M: Y: k
class Checkout' E* V$ x# h1 B) \" M
{
H' S- E, r- j# n, m$ R7 H2 p3 F1 `8 xprivate:
7 m6 b& N5 \6 S: X1 ^7 m char ax[50];
5 C& D$ J% U# h! ~3 } char bx[4];
% r4 P, f+ N3 Z( O8 Z' X! h* }5 I8 h int x;
. f! ~5 ]: n2 U# cpublic:
7 a$ |# E4 \0 F! Y" X* ^4 J int length;
% l# t# K! t# k, C6 L. l# B Checkout()
" C4 w! O6 T V3 Z# H3 F, _( V& K. ^9 y {
f& Y% m& x! _3 w" l4 G cin>>ax;
/ `9 _; Y# B7 z length=strlen(ax);
% ]" b7 u, @. r3 c: ~6 { }
: K! i! t5 w& Y4 E void cxc();
3 ?- \) f5 o0 S: D5 X! c; L bool qyu();; H1 B5 [* O* q* H% \0 z4 B% v
void add();0 o" h7 ]+ k% t. N7 P$ S; M* m. r
};
3 v* A/ V& t, ~/ @1 P) c2 ^ jvoid Checkout::cxc()2 l+ r% m8 j/ W4 X2 H& a
{3 Z) c2 J# ?7 h- E4 P
for(int i=0;i<4;i++){! z8 x8 l9 Q1 V) P$ j
ax[length+i]='0';
! M, q" ?0 f$ F7 I( P9 p* a }
9 j6 W0 C0 g, C% U' z# W$ E1 j. I}//将输入序列后加4个0. D/ i$ H* o% v; x# Q
bool Checkout::qyu()! R0 ~6 P& S6 B' j+ E
{
& f6 F1 {0 s, n" T7 r p4 Q( ~/ v char c[5];
) H8 |, x3 u+ _ int i,j,n;
, c) S V$ T2 I; W6 ~ int m=5;* M+ o" {0 n5 J# n+ n* E
for(i=0;ax<i>=='0';i++);
; P) [* U$ }" X" i7 Z$ E2 q, Y* R: j if(i==length)/ H/ |8 a1 p' G* n
{cout<<"余式是0"<<endl;" M7 N* A4 c8 H* s! L% ]
cout<<"发送成功"<<endl;
* d% ~+ E5 ~2 T7 z: k, X exit(0);
4 Q! j& z5 e5 Q- h7 g. G( E; Y }
3 p2 _( V& y/ lelse{
6 K5 D8 ]2 h3 A5 {% f1 ] for(i=0;i<5;i++)
F' j; {' F- A0 d5 z* O8 f4 }4 Q/ o c<i>=ax<i>;3 a1 A6 B" t; V% H# i; ~
while(m==CRC)
6 W- J' F6 d2 J! m( k% W4 s { for(j=0;j<CRC;j++)
4 u! T" R4 K% w9 `) T* ~ { ' ?$ Y/ f% H3 a
if(c[j]==data[j])& z4 S/ }8 V8 F! |% Y
c[j]='0';9 P& v8 V! _2 J: }) t/ Y/ l
else/ F( [. f$ l* c$ T
c[j]='1';
, O; o. t, x# H }
# I! U. |& S$ T; n6 L! F- ~ for(j=0;c[j]=='0';j++);
, ^0 ?) F1 r* [$ @ n=j;
6 Z0 ^- N7 N9 E1 W' k/ ]. s for(m=0;m<CRC-n;m++) w0 Q$ V. z! a" S" I& ~9 A9 \5 H
{+ Q3 @, Y# n+ w+ W
c[m]=c[j];
]6 m" ~8 l% f6 t j++;
' I! m9 k# W+ x4 H2 C( W7 T }6 x$ z6 N: |# C! ?/ F& [4 Z& {- w
while(i<length&&m<5)) Z0 T8 E+ {4 N- e1 U, ~3 y
{
: L* B: T7 f' e+ @4 w c[m]=ax[i++];
, o1 X) M1 E. y, j m++;
' g" O8 R8 J* e3 D }
* X! x. s' v/ \+ ?0 B }, e3 ^8 _( i2 G$ K/ i
}: d4 r6 K% `. M: I1 x
int k;% l4 I% O: ~, c( f& J9 y5 I/ N$ B& B
for(k=0;k<m;k++)5 W( v( {9 H: \" @
bx[k]=c[k];
3 A; B# j% [% c4 e4 y% a# W for(j=0;bx[j]=='0';j++);
% w* p0 M* ] L; Z& {) S, M' j if(j==m) U4 \' p. C" {' q. t! b
{cout<<'0'<<endl;
7 v$ Q, Z7 G$ ~) f5 T x=0;5 J6 ~0 `8 P0 r- D
return true;
3 c! U0 p: U0 [$ B: M }
- F$ l2 z* z: r$ _ else+ B2 n! a2 w, M0 C ?4 j
{for(n=j;n<m;n++)9 ^* Q7 M# b( H3 }% E
cout<<bx[n];$ V) z) [5 M8 R8 I3 b. ~; s
x=m-j;7 q0 x. W5 K9 [, h' U. Z5 N
cout<<endl;
) x8 @ e- {8 D' g! s return false;
- E- C. x6 v3 k; x; f) M: Q8 I }2 {. {" X& v4 r- n5 w1 ?
}
" I$ @: E: y% V/ y- mvoid Checkout::add()
3 d: F$ W4 d6 C" B; T; e{
5 M; v& o/ Z- L$ ~int j=0;# Z5 T j+ v7 }3 s% o1 v
for(int i=length-x;i<length;i++)
/ y" v: F ~% q" s ax<i>=bx[j++];7 a. q x( l* f( c( q0 {
cout<<"发送的序列加上余数后变成:";
: `% b% |& w- c4 m$ g" E+ D for(i=0;i<length;i++)
' ^2 g, W& r K/ n% U6 }5 g cout<<ax<i>;
* P0 r [& J# U8 x) @2 o cout<<endl;7 ^& ~# @0 C+ o- e/ j
}8 W& P7 R2 e! b: Z' R0 q+ b N; K
void main()( f( n2 Y, i7 H5 Z! k0 k
{ ) d* a! c% ^7 b9 h I
cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; 8 m8 c+ x8 |( B8 s c* e6 D5 {
cout<<"请输入发送数据比特序列:"<<endl;
' e2 H) X1 N! A0 S. U# o Checkout test;
: W# o8 v+ J8 Y# i test.cxc();! R" {0 V0 h: E/ R
cout<<"余式比特序列是:";
# g* u- v& O$ a/ [; `: b! c test.qyu();% V# ^ O$ N1 _. \" o
test.add();4 c) m: z5 t, o+ S: J
cout<<"试试这次是否能被整除."<<endl;3 J6 K9 e/ P2 p
cout<<"新余数是:";
) R3 A: D1 ^; N- [& p3 X3 S& |. Q% }. _ if(test.qyu())" \9 p) K8 _: i, ^: m
cout<<"已发送成功!"<<endl;& C( z, k# L# [3 b1 ^0 ?9 T$ V
else! O. d( W# n& T0 N
cout<<"未发送,失败!"<<endl;( d- o0 b1 }8 T* e, D8 E# s
} |
|