求一个CRC校验C++源代码。题目:发送数据为1101011011,生成的多项式为P(X)=X4+X+1(X4为X的4次方),

求一个CRC校验C++源代码。题目:发送数据为1101011011,生成的多项式为P(X)=X4+X+1(X4为X的4次方),,第1张

下面的代码输入为原数饥薯据和多项式对就的二进制码,输出为产生的校验码。

如原数据是1101011011,多项式是X^4+X+1(即10011)。产生的校验码为1110。

输入1101011011  10011

输出1110

#include <iostream>

#include <cstring>

#include <iomanip>

using namespace std

#define WORDSIZE 255

int getNum(char a[], int n)

void showNum(int r, int n)

int main(int argc, char *argv[])

{

     cout<<"please input X and P:"<<endl

     int x, p, lenA, lenP

     char a[WORDSIZE]

     memset(a, '烂野者\0', WORDSIZE)

     cin>>a

     lenA = strlen(a)

     x = getNum(a, WORDSIZE)

     memset(a, '\0', WORDSIZE)

     cin>>a

     lenP = strlen(a)

     p = getNum(a, WORDSIZE)

     x <<= lenP - 1

     int result = 0, i

     for (i = lenA - 1 i >= 0 i--) {

      if (x & (1 << (i + lenP - 1))) {

           result = result * 2 + 1

           x ^= (p << i)

           

      } else {

           result = result * 2

      }

     }

     showNum(x, lenP - 1)

     

     return 0

}

int getNum(char a[], int n)

{

     int k = 0

     int i

     for (i = 0 i < n && a[i] != '\0' i++) {

      k = k * 2 + a[i] - '0'

     }

     脊让return k

}

void showNum(int r, int n)

{

     int i

     for (i = n - 1 i >= 0 i--) {

      if (r & (1 << i)) {

           cout<<1

      } else {

           cout<<0

      }

     }

     cout<<endl

}

这是以前自己偷懒做计算机网络CRC题目时写的程序,希望对你有用。

我来答

1.假定16个数放在20H为首的地址里,送到目的50H为首橘乎厅的地址里

LOOP:

MOV R0,#20H

MOV R1,#50H

MOV A,@R0

MOV @R1,A

INC R0

INC R1

CJNE R0,#30H,LOOP当inc r0 前,R0=2FH,加1后R0+1=30H,不跳转

2.假定16个数放在内部RAM20H为首的地址里,送到外部RAM目的0010H为首的地址里

MOV R0,#20H

MOV DPTR,#0010H

MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

CJNE R0,#30H,LOOP当R0=2FH时,R0+1=30H,不跳转

3.将外部RAM以1000H为首的16个数据放入,外部RAM以2000h为首的地址内

MOV R7,#0FH

MOV DPTR,#1000H将源地址放入第一个DPTR

INC AUXR1转换指针,指向第二个DPTR

MOV DPTR,#2000H;将目的地址放入第二个DPTR

INC AUXR1指向源dptr

LOOP:

MOV A,@DPTR将源地址数据放入A

INC DPTR源地址加1

INC AUXR1转顷碧换为目的地址

MOV @DPTR,A将A内容放入目的地址

INC DPTR目的地址加1

INC AURX1指向源地址

DJNZ R7,LOOPR7减1,圆隐循环,减15次


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12352261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存