CRC编码编程实验
答案:1 悬赏:40
解决时间 2021-12-29 06:46
- 提问者网友:柠檬香
- 2021-12-28 17:32
内容:用C或VC语言设计CRC编码和校验程序目的:通过编程加深对CRC编码认识
最佳答案
- 二级知识专家网友:伤口狠精致
- 2021-12-28 17:50
在用C 语言编写CRC 校验码的实现程序时我们应该注意,生成多项式 对应的十六进制数为0x18005,由
于CRC 寄存器左移过程中,移出的最高位为1 时与 相异或,所以与16bit 的CRC 寄存器对应的生成多项
式的十六进制数可用0x8005 表示。下面给出并行处理8bit 数据流的C源程序:
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg 为crc 寄存器, data_crc 为将要处理的8bit 数据流
{
unsigned short msb; //crc 寄存器将移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i 为左移次数, gx 为生成多项式
data = (unsigned short)data_crc;
data = data << 8;
reg = reg ^ data;
do
{
msb = reg & 0x8000;
reg = reg << 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i < 8);
return (reg);
}
以上为处理每一个8bit 数据流的子程序,在计算整个数据流的CRC 校验码时,我们只需将CRC_reg 的初
值置为0x0000,求第一个8bit 的CRC 值,之后,即可将上次求得的CRC 值和本次将要处理的8bit 数据作
为函数实参传递给上述子程序的形参进行处理即可,最终返回的reg 值便是我们所想得到的整个数据流的
CRC 校验值。
于CRC 寄存器左移过程中,移出的最高位为1 时与 相异或,所以与16bit 的CRC 寄存器对应的生成多项
式的十六进制数可用0x8005 表示。下面给出并行处理8bit 数据流的C源程序:
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg 为crc 寄存器, data_crc 为将要处理的8bit 数据流
{
unsigned short msb; //crc 寄存器将移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i 为左移次数, gx 为生成多项式
data = (unsigned short)data_crc;
data = data << 8;
reg = reg ^ data;
do
{
msb = reg & 0x8000;
reg = reg << 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i < 8);
return (reg);
}
以上为处理每一个8bit 数据流的子程序,在计算整个数据流的CRC 校验码时,我们只需将CRC_reg 的初
值置为0x0000,求第一个8bit 的CRC 值,之后,即可将上次求得的CRC 值和本次将要处理的8bit 数据作
为函数实参传递给上述子程序的形参进行处理即可,最终返回的reg 值便是我们所想得到的整个数据流的
CRC 校验值。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯