⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scrambler.cpp

📁 C 程序 球面方位角算法: azimuth.cpp CRC校验快速算法: CRC_Table.cpp 解扰码算法: scrambler.cpp Matlab 程序 信号带宽测量: Ba
💻 CPP
字号:
//    功能:按既定移位寄存器结构完成加解扰运算. 本例中抽头为[1,2,4,5,7,8,10,11,12,16,22,23,26,32]
//输入参数:32位初态Initi,输入数据指针dat_in,输出数据指针dat_out, 码元数count
void DeCodScram ( __int32 Initi, unsigned char *dat_in,unsigned char *dat_out, int count)		//
{
		int i, ibit = 0, ibyte = 0, BytN=count/8+(count%8>0);	
		unsigned char *Sreg=new unsigned char[33+count], data = 0;
		unsigned char *ScramCod=new unsigned char[BytN];

		for (i=31; i>=0; i--,Initi <<=1)
		{	if (Initi & 0x80000000)
				Sreg[i] = 1;
			else
				Sreg[i] = 0;
		}

		for (i=32; i<32+count; i++)
		{	Sreg[i] = Sreg[i-1]^Sreg[i-2]^Sreg[i-4]^Sreg[i-5]^Sreg[i-7]^Sreg[i-8]^Sreg[i-10]^Sreg[i-11]^Sreg[i-12]^Sreg[i-16]^Sreg[i-22]^Sreg[i-23]^Sreg[i-26]^Sreg[i-32];
			data = ((data<<1)&0xfe)|Sreg[i];
			ibit++;
			if (ibit>=8)
			{
				ibit=0;
				ScramCod[ibyte++] = data;
			}
		}
		
		if ( ibit<8 ) 
		{	ScramCod[ibyte]=data<<(8-ibit);}
			
		for (i=0; i<BytN; i++)					
		{  dat_out[i]=dat_in[i]^ScramCod[i];}	//解扰: 存入RmCod时就自右至左 因为数值上是高字节在右,低字节在左
}


int _tmain(int argc, _TCHAR* argv[])		// 实验程序
{
	int i, i1;
	unsigned char ScramCod[63];
	__int32 Initi=0x89a27c31;				//32位移位寄存器初态
	int datcount=4;							//需要解扰数据有4个字节
	unsigned char data[4]={0x7B,0xC7,0x5A,0x28};
	DeCodScram(Initi,data,RmCod,30);		//完成30bit解扰码(左对齐—尾部2b无效)
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -