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

📄 cpp1.cpp

📁 汉明码生成程序
💻 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 + -