📄 lfsrdsr.cpp
字号:
#include<stdio.h>
unsigned char jgcs[1]={0x30}; //结构常数序列为0x30,即[Cn,Cn-1,...,C1]为[00110000]
unsigned char zt[9];//状态
#define N 30
//LFSR进动一拍,反馈函数为x3+x4
unsigned char *LFSR_go(unsigned char *pzt,unsigned char *pjg,int n)
//pzt[]为状态数组,pjg[]为结构常数数组,n为状态字节数
{
unsigned char t=0;
int c=0,i;
for (i=0;i<n;i++)
t^=(pzt[i]&pjg[i]);
t^=((t<<1)^(t<<2)^(t<<3)^(t<<4)^(t<<5)^(t<<6)^(t<<7));
//实现反馈函数的计算,产生反馈值,放在t的最高位
if (t&0x80)
c=1;
for (i=n-1;i>=0;i--)
{
t=pzt[i];
pzt[i]=((t<<1)|c)&0xff;
c=(t&0x80)?1:0;
}
return (pzt);
}
//DSR进动一拍
unsigned char *DSR_go(unsigned char *pzt,unsigned char *pjg,int n)//n为状态字节数
{
unsigned char t;
int c=0,i;
for (i=n-1;i>=0;i--)
{
t=pzt[i];
pzt[i]=((t<<1)|c)&0xff;
c=(t&0x80)?1:0;
}
if (c)
for (i=0;i<n;i++)
pzt[i]^=pjg[i];
return (pzt);
}
void main()
{
int i;
int m;
printf("请输入寄存器所占的字节数\n");
scanf("%d",&m);
printf("请输入初态(输入的数小于16进制的FF)\n");
for(i=0;i<m;i++)
{
scanf("%x",&zt[i]);
}
printf("LFSR进动后结果 \n");
for (i=0;i<N;i++)
{
zt[0]&0x80?printf("1 "):printf("0 ");
LFSR_go(zt,jgcs,m);
}
printf("\n\n请输入寄存器所占的字节数\n");
scanf("%d",&m);
printf("请输入初态(输入的数小于16进制的FF)\n");
for(i=0;i<m;i++)
{
scanf("%x",&zt[i]);
}
printf("\nDSR进动后结果 \n");
for(i=0;i<N;i++)
{
zt[0]&0x80?printf("1 "):printf("0 ");
DSR_go(zt,jgcs,m);
}
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -