📄 hamming_c.txt
字号:
#include < stdio.h >
#include < math.h >
void main( int argc, char * argv[])
// 用1个字节代替1位海明码
{
unsigned char a[ 16 ] = { 1 , 1 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 }; // 存放原始编码
unsigned char b[ 21 ]; // 存放编码后的Hamming Code
int K, N;
K = 16 ;
N = 21 ;
int i = 1 ;
int j;
int k = 0 ;
printf( " 编码前: " );
for ( ; i <= K; i ++ )
printf( " %d " ,a[i - 1 ]);
printf( " \n " );
int tt = 1 ;
for ( i = 1 ; i <= N; i ++ )
{
b[i - 1 ] = 0 ; // 从左至右对12位数据清零,因为扫描编码也是从左至右的
if ( i != tt) // 当位置i为权码位置,即为2的N次方时
{
j = 0 ; // 对i位置进行计数
unsigned char t = 0x1 ;
while ( j < N - K ) // 对位置i的四位进行检测
{
if ( i & t) // 为真时,则表示该位对校验位有影响
{
b[t - 1 ] = (b[t - 1 ] + a[k]) % 2 ;
}
j ++ ;
t <<= 1 ;
}
b[i - 1 ] = a[k];
k ++ ;
}
else
{
tt = tt * 2 ;
}
}
printf( " 编码后: " );
for ( i = 1 ; i <= N; i ++ )
{
printf( " %d " ,b[i - 1 ]);
}
printf( " \n " );
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -