?? 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 + -