该用户从未签到
|
谁能帮我CRC算法编程实现换个算法啊??帮忙啊, C, t" |9 E0 W0 y. ]9 n0 w* F9 X4 U
#include
; U7 q, _, l! ?. @5 V9 X( a h9 q#include
* Z: V: M! [9 e3 k# F/ h" i#include2 G* Z6 Z3 y6 G8 {7 c) Z
#define CRC 5
7 \) b& E l& D0 T7 a2 ochar data[5]={'1','1','0','0','1'};2 v" h, n% q! v2 ^
class Checkout2 S$ ?, J: U0 C
{( ^% z9 h7 C- c% B
private:1 U: x/ z9 @# ^- a2 L |
char ax[50];
; V3 U y" E. R& s char bx[4];
3 a$ e* H/ }- @5 T' @; q int x;1 z8 h9 @4 d+ d1 d
public:
. q1 a1 L$ ^- z6 p1 A5 t int length;
" _: Z- L1 t9 R' t Checkout()) ~" V8 w+ b, M6 H8 a
{
9 H9 u6 v* X( ~2 S cin>>ax;3 v. r" _' ?6 v2 S. @
length=strlen(ax); u5 ? r5 F3 b* s* o
}
9 U" a4 i5 [4 q o$ Y void cxc();
0 k1 L: b# W. O6 i" A+ j# V6 _ bool qyu();# [( Y6 J/ [% b# R+ W6 s4 \& ]# d
void add(); {3 r& d) j1 m# M
};0 `$ q' N3 ~2 b! [- w# a
void Checkout::cxc()1 `# r6 L& s \# e7 f- `
{
M, d6 |" @1 \, W, q for(int i=0;i<4;i++){8 G F* h- C* n7 e m8 }
ax[length+i]='0';
4 F$ T! x2 Q6 B* z' d. o: g! b! a }
; k: D6 N; W8 u' }7 M3 b+ d}//将输入序列后加4个0
( P7 H, q* t6 X, tbool Checkout::qyu()' D: K8 r- n- i
{
; T, e, b% p2 q: X char c[5];, }; }- L. x+ f
int i,j,n;/ g: V' U: V! Y# B5 t0 `
int m=5;$ {9 _; E' q/ l% z' _
for(i=0;ax<i>=='0';i++);) }$ b- J( b, Q! s2 `
if(i==length)
7 _. o9 H3 }& x {cout<<"余式是0"<<endl;
, }$ I! t6 Q0 J# m4 v cout<<"发送成功"<<endl;
2 R6 Y0 K5 R0 t+ \2 c exit(0);
$ M! H: |" Q5 {- o }
- p# S! x9 K+ ^4 Z& a& @' Selse{
/ V* u- ^" Y. k; n$ v: s; o/ _ for(i=0;i<5;i++)
; v* p& A4 E( X) _8 Y9 u c<i>=ax<i>;/ H/ g1 I- W, D# Q
while(m==CRC)) R' d9 O# F% q( M) J1 P# u
{ for(j=0;j<CRC;j++)9 e# o7 L K: ~4 y
{ . h# @ H- B: a4 v
if(c[j]==data[j]) a6 t( R4 g' r& ?) w# t% N# h5 [
c[j]='0';
$ j, d8 h) a' ?. f; Z else, F; H9 l' W2 V- e @6 D( b
c[j]='1';
' U4 C. ~* T" J! } }* N! ~8 _7 g' o8 {& y% A1 @
for(j=0;c[j]=='0';j++);
) p' v6 [+ z' @6 X4 v n=j;
& U( u5 ^/ D+ I for(m=0;m<CRC-n;m++)
4 Z/ A0 r% k4 M) y1 v {9 A7 ]5 m- R+ m* T, `- p. g ^! u
c[m]=c[j];
, V0 ]7 Z/ b; \2 H0 b$ g C- A j++;8 u, n, ^+ f9 V. }
}- M$ @0 z; V0 i& Z
while(i<length&&m<5)5 B- V+ [; {, F* f& f. X
{
& c* X8 w# L' z" P; S" f0 @ c[m]=ax[i++];
. F, N' }9 ?3 x H* p5 O" d m++; % i9 q5 `( k J! `4 }
}
0 z2 ?4 k! R# G) U }' [9 K7 }- ^( M: A- K/ @
}
& t8 {' K. L# B+ {, b int k;3 p9 ?( u4 T6 e9 p9 v4 ^( u
for(k=0;k<m;k++)* w+ C# Y r! q2 \6 F6 w
bx[k]=c[k];* \ n! |3 F) F! |" [; ]
for(j=0;bx[j]=='0';j++);% L* M7 W* b4 w" r& M: _+ l
if(j==m)
& e; U$ w! a. `, J+ o {cout<<'0'<<endl;7 d. a5 L0 b0 x, H! F2 `, U. |/ |
x=0;
p6 l y" q& f0 H& Y1 l return true;3 ^# c/ _* H- Y
}/ q# V/ |, r1 T# z; F
else- R4 _+ h! N) M
{for(n=j;n<m;n++)
, T1 d/ P5 M1 X& } cout<<bx[n];: |5 e: v9 r- _- j3 v
x=m-j;# @. K9 z2 Z# S' w. [5 _ w
cout<<endl;
$ B7 x2 Z( }3 t return false;
8 y+ T; P( C1 V9 L% l& E" u2 M }
( ]+ {+ Z9 D: L3 k) Y}8 D$ g/ A& k8 Y ?5 `
void Checkout::add()
7 M$ G7 ~/ v9 W' U, x: Y{
- ?4 v- U+ P# w C/ i' R1 Y. f) ]( Cint j=0;
6 J( @8 ]$ {4 f. c for(int i=length-x;i<length;i++)3 ~! V$ F+ F |/ j) j
ax<i>=bx[j++];6 r3 F S- s6 s f b, q0 Y
cout<<"发送的序列加上余数后变成:";
5 s. V; n+ ~" x; ^* h/ n for(i=0;i<length;i++)
8 k1 c, v+ N, Y; W# W cout<<ax<i>;
% o5 y% }3 E } cout<<endl;
7 X: {" g0 {! D+ I& {}
- d# A$ ?5 G6 {, L3 y9 {void main()' z2 d5 r: g z0 a# P1 z" \
{
3 v, S3 R: `8 N* ]; _ cout<<"本次实验模拟CRC校验,其生成多项式的比特序列是11001"<<endl; * K- S" @1 T2 u/ E
cout<<"请输入发送数据比特序列:"<<endl;
! C. l/ I" S: V; \6 u% j Checkout test;5 K9 f6 Z; ~: u- I/ S O
test.cxc();' p+ X. s h) G [4 W9 E, P( E& {
cout<<"余式比特序列是:";
" i! X3 E* u; x* k test.qyu();
% e# d1 r: B# ^0 L! q; E5 @ test.add();* D5 S6 T# b, g1 `) b& a/ }* L
cout<<"试试这次是否能被整除."<<endl;
7 P' K# G7 N% b cout<<"新余数是:";
4 }. `0 f$ R9 W9 s, H7 M/ I if(test.qyu())
0 N4 x7 x3 ]7 y7 T' H' j cout<<"已发送成功!"<<endl;
4 N0 P: F4 ?7 n* t else2 C! E) |& _* {4 ] L/ U7 P0 Y7 S r
cout<<"未发送,失败!"<<endl;" V- S. B' \/ V% f
} |
|