海明碼生成的方案

2021-10-23 13:35:33 字數 1993 閱讀 6698

輸入一段10101…序列,生成其海明碼。生成過程在**中已經表示出來了。

本**在code::blocks17.12中正常執行。

#include

#include

#include

#define maxsize 60

//2的冪

intpower

(int subnum)

int res=2;

while((

--subnum)

>0)

return res;

}char procode[maxsize]

;//建立乙個原始**序列

char

*create_a_code()

//計算漢明碼的位數

intcount_the_checkcode_digit

(int digit)

for(temp=3;

;temp++)}

}//拆開原有**,留出漢明碼的位置

char

*break_the_code

(char

* precode)

i=0;

while

(++i<=checkcode_digit+1)

else

} code[i-1]

='\0'

;printf

("漢 明 碼:%s\n"

,code)

;return code;

}//奇偶位校驗函式

intparity_check

(char

* code)

res+

=code[i]

-'0';}

if(res%2==

0)else

}//拆分**進行奇偶位校驗

//輸入1---1:拆成2 4 6 8 10...

//輸入2---2:拆成2 / 5 6 / 9 10 /...

//輸入3---4:拆成4 5 6 / 11 12 13 14 / 19 20 21 22 /...

//輸入4---8:拆成8 9 10 11 12 13 14 / 23 24 25 26 27 28 /...

char

*divide_the_code

(char

* code,

int times)

while

(i<=times*2-

2)}while(1

)printf

(" ");

i++;}

if(code[i+1]

=='\0'

)for

(int r=

0;r)printf

("^");

procode[j++

]=code[i++];

}if(code[i+1]

=='\0')}

procode[j]

='\0'

;printf

("--->>%s"

,procode)

;return procode;

}void

construct_hamming_code

(char

* code)

if(code[i]

=='\0'

)char

* temp=

divide_the_code

(code,times++);

code[i]

=parity_check

(temp)

+'0'

;printf

("漢 明 碼:%s\n"

,code)

; i++;}

}int

main()

}

關於海明碼

1.確定冗餘位長度 設原始資料為n,冗餘位為k 則n k 1 2 k 1001011 共7位,則8 k 2 k k 4 冗餘位為4位 2.將原始資料新增校驗位組成碼字 校驗位的設定 2 0 2 1 2 2 2 3 1 2345 6789 1011 校驗校驗1校驗 001校驗 011 3.確定每個校驗...

海明碼(漢明碼)的工作機制

一 海明碼的形成方式 1 首先海明碼是由資訊位和校驗位組成的 2 資訊位校驗位的關係 校驗位的位數r 資訊位的位數i 2 r 1 i r 3 校驗位的位置是2的整數次方 如 1 2 4 8 4 海明碼位數分組 因為海明碼其實是分組的奇偶校驗碼,所以有個分組的概念 1 1 3 5 7 2 2 3 6 ...

海明碼與海明距離

一,海明碼 1 傳輸的資料 1101 2 校驗位計算公式 2 k k n 1,n為資料位 在本例中計算的k為3 用p1,p2,p3,表示校驗位,其中 p1,的位數2 0,p2,的位數2 1,p3,的位數2 2則 1 21 2 41 4 2 41 2 4 位數的二進位制 0001 0010 0011 ...