📄 cpp1.cpp
字号:
# include "stdio.h"
void main()
{ int code_in;
int i,j,a;
int code_out[15];
int mid[15];
int count=0;
/* 代码 */
int g[15]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x365,0x1AF,0x35E,0x1D9,0x3B2};
/* int g[15]={0000000001b, */
/* 0000000010b, */
/* 0000000100b, */
/* 0000001000b, */
/* 0000010000b, */
/* 0000100000b, */
/* 0001000000b, */
/* 0010000000b, */
/* 0100000000b, */
/* 1000000000b, */
/* 1101100101b, */
/* 0110101111b, */
/* 1101011110b, */
/* 0111011001b, */
/* 1110110010b} */
while(count != 10)
{
printf("请输入原始信息数据(0~3ff):");
scanf("%x",&code_in);
for(i=0;i<15;i++)
{
a=code_in&g[i];
for(j=0;j<10;j++)
{
mid[j]=a&1;
a=a>>1;
}
code_out[i]=mid[0];
for(j=1;j<10;j++)
code_out[i]=code_out[i]^mid[j];
}
printf("纠错编码后的输出比特流: ");
for(i=14;i>=0;i--)
printf("%d",code_out[i]);
/* 解码及纠错 */
for (i=0;i<15;i++)
{
code_out[i]=0;
mid[i]=0;
}
code_in=0;
i=0;j=0;a=0;
int check_out[5];
int errorflag,matchbit,matchflag,comparebit;
int check[5]={0x765,0x9AF,0x135E,0x21D9,0x43B2}; /*纠错数组*/
/* int check[5]={000011101100101b, */
/* 000100110101111b, */
/* 001001101011110b, */
/* 010000111011001b, */
/* 100001110110010b } */
printf("\n输入接收端收到的原始数据(16进制):");
scanf("%x",&code_in); /*输入接收端收到的原始数据*/
a=code_in;
for (i=0;i<15;i++) /*将接收到的数据转换为比特流*/
{
code_out[i]=a&1;
a=a>>1;
}
for(i=0;i<5;i++) /*计算校验和*/
{
a=code_in&check[i];
for(j=0;j<15;j++) /*获得a的每一个比特 */
{
mid[j]=a&1;
a=a>>1;
}
check_out[i]=mid[0];
for(j=1;j<15;j++)
check_out[i]=check_out[i]^mid[j]; /*所有的比特模2加*/
}
i=0; errorflag=0;
do
{
if (check_out[i]==1) { errorflag=1; i=5;}
else i++;
}
while (i<5); /* 检查是否所有的check值均为0 */
if (errorflag==1)
{ i=0; matchbit=100; /* 在同一行中查找*/
do
{
j=0; matchflag=1;
do
{
comparebit=(check[j]>>i)&1; /* 得到数组的 [j][i]比特 */
if (check_out[j]!=comparebit)
{
j=5;matchflag=0;
} /*如果未找到合适的比特,立即跳出*/
else j++;
}
while (j<5);
if (matchflag==1)
{
matchbit=i;i=15;
} /*如果找到合适的比特,立即跳出*/
else i++;
}
while (i<15);
if (matchbit<=14)
{
code_out[matchbit]=code_out[matchbit]^1; /*纠正错误的比特*/
printf("第%d位数据出错!\n",matchbit+1);
}
else printf("错误但不可纠!\n");
}
else printf("传输正确或错误不可检!\n");
printf("还原的信息比特为:\n");
for (i=9;i>=0;i--) /*仅打印信息比特*/
printf("%d",code_out[i]);
printf("\n");
printf("/********************************************************/\n");
printf("请输入count的值决定是否继续程序\n");
printf("如果你输入10,程序将停止 :");
scanf("%d",&count);
printf("/********************************************************/\n");
if(count == 10)
printf("你选择了退出,再见!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -