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

📄 hamming_c.txt

📁 汉明码的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 + -