基于c语言的crc4校验和奇校验
包含无错错一位错两位的验证
crc4校验:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MAX 32767.0
void c4(int crc[],int crc4[])//校验函数
{
for (int i=0; i<40; i++) {
if(crc[i]==1)
{
for (int a=1; a<5; a++)
{
crc[i+a]=abs(crc[i+a]-crc4[a]);
}
}
}
for (int i=40; i<44; i++) {
printf("%d",crc[i]);
}
}
int main(int argc, const char * argv[]) {
// 生成校验位
int crc[44];
int crc_change[44];
int crc4[5]={1,0,0,1,1};
printf(“crc4校验:\n”);
printf(“输入的信号:”);
for(int i=0;i<40;i++)
{
crc[i]=round((double)(rand()%10)/10);
crc_change[i]=crc[i];
printf("%d",crc[i]);
}
for (int i=40;i<44;i++)
{
crc[i]=0;
}
for (int i=0; i<40; i++) {
if(crc[i]==1)
{
for (int a=1; a<5; a++)
{
crc[i+a]=abs(crc[i+a]-crc4[a]);
}
}
}
//校验位
printf(“校验位:”);
for (int i=40; i<44; i++)
{
crc_change[i]=crc[i];
printf("%d",crc[i]);
}
//
for (int i=0; i<44; i++)
{
crc[i]=crc_change[i];
}
//无错校验
printf("\n");
printf(“无错余数:”);
c4(crc,crc4);
//错一位校验
crc[0]=abs(crc[0]-1);
printf("\n");
printf(“错一位余数:”);
c4(crc,crc4);
//错两位校验
crc[43]=abs(crc[43]-1);
printf("\n");
printf(“错两位余数:”);
c4(crc,crc4);
//错随机位校验
crc[43]=abs(crc[43]-1);
crc[0]=abs(crc[0]-1);
int q=rand()%44;
crc[q]=abs(crc[q]-1);
printf("\n");
printf(“错随机位余数:”);
c4(crc,crc4);
printf("\n");
return 0;
}
奇校验:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MAX 32767.0
void c2(int crc[],int crc2[])
{
for (int i=0; i<40; i++) {
if(crc[i]==1)
{
for (int a=1; a<2; a++)
{
crc[i+a]=abs(crc[i+a]-crc2[a]);
}
}
}
for (int i=40; i<41; i++) {
printf("%d",crc[i]);
}
}
int main(int argc, const char * argv[]) {
// 生成校验位
int crc[41];
int crc_change[41];
int crc2[2]={1,0};
printf(“奇校验:\n”);
printf(“输入的信号:”);
for(int i=0;i<40;i++)
{
crc[i]=round((double)(rand()%10)/10);
crc_change[i]=crc[i];
printf("%d",crc[i]);
}
for (int i=40;i<41;i++)
{
crc[i]=0;
}
for (int i=0; i<40; i++) {
if(crc[i]==1)
{
//crc[i+4]=1;
for (int a=1; a<2; a++)
{
crc[i+a]=abs(crc[i+a]-crc2[a]);
}
}
}
//校验位
printf(“校验位:”);
for (int i=40; i<41; i++)
{
crc_change[i]=crc[i];
printf("%d",crc[i]);
}
//
for (int i=0; i<41; i++)
{
crc[i]=crc_change[i];
}
//无错校验
printf("\n");
printf(“无错余数:”);
c2(crc,crc2);
//错一位校验
crc[0]=abs(crc[0]-1);
printf("\n");
printf(“错一位余数:”);
c2(crc,crc2);
//错两位校验
crc[40]=abs(crc[40]-1);
printf("\n");
printf(“错两位余数:”);
c2(crc,crc2);
//错随机位校验
crc[40]=abs(crc[40]-1);
crc[0]=abs(crc[0]-1);
int q=rand()%40;
crc[q]=abs(crc[q]-1);
printf("\n");
printf(“错随机位余数:”);
c2(crc,crc2);
printf("\n");
return 0;
}