📄 cpp1.cpp
字号:
#include "iostream.h"
#include "stdio.h"
#include "math.h"
#include <windows.h>
#include <dos.h>
#include <stdlib.h>
unsigned long *encode(unsigned long *data,unsigned long size)
{
unsigned long *res;
unsigned long n = floor(log(size)); //the length of hamming code
res= (unsigned long *)malloc(n);
if (! res)
{
return NULL;
};
for(unsigned long i = 0; i < n; i++)
{
for(unsigned long j = 0; j < size; j++)
{
if((1<<i) & (j + 1) != 0)
res[i] ^= data[j];
}
}
return res;
}
unsigned long check(unsigned long *data, unsigned long datasize,unsigned long *hamming,unsigned long hammingsize)
{
unsigned long pos = 0;
for(unsigned long i = 0; i < hammingsize; i++)
{
for(unsigned long j = 0; j < datasize; j++)
{
if((1<<i) & (j + 1) != 0)
hamming[i] ^= data[j];
}
if(hamming[i] != 0)
pos += 1<<i;
}
if(pos > 0)
data[pos - 1] = ~data[pos - 1];
return *data;
}
void main()
{
unsigned long data[10];
unsigned long data1[10];
unsigned long temp[10];
unsigned long temp1[10];
for (int i=0;i<10;i++)
{
data[i]=i+48;
}
for (int j=0;j<10;j++)
{
data1[j]=j+48;
}
data1[8]=47;
data1[7]=46;
unsigned long CrcAccum=0;
unsigned long CrcAccum1=0; /*hamming码初值为0*/
unsigned long t;
unsigned long t1;
for (i=0;i<10;i++)
{
temp[i]=encode(&data[i],10)[i];
temp1[i]=encode(&data1[i],10)[i];
}
printf("第一组数据:\n");
for (i=0;i<10;i++)
{
printf("%x, ",data[i]);
printf("第一个hamming=%x\n",temp[i]);
}
printf("\n第二组数据:\n");
for (i=0;i<10;i++)
{
printf("%x, ",data1[i]);
printf("第二个hamming=%x \n",temp1[i]);
}
t=CrcAccum^CrcAccum1;
t1=data[7]^data1[7];
printf("\n第=%d个数发生的改变 %d\n",t,t1);
//temp=check(data,10,CrcAccum,10);
//temp1=check(data1,10,CrcAccum1,10);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -