Код Хэмминга (7,4) — ошибка реализации C ++

#include <iostream>
#include <string>

using namespace std;

int get_bin_representation(char x){

if(x == '1'){
return 1;
}
else if(x == '0'){
return 0;
}
}
int gen_hamming_code(string token){

int bits[4];
int temp(0);

for(int k=0; k<4; k++){
bits[k] = get_bin_representation(token.at(k));
}

int ham_code[7];

ham_code[0] = bits[0] + bits[1] + bits[3];
ham_code[1] = bits[0] + bits[2] + bits[3];
ham_code[2] = bits[0];
ham_code[3] = bits[1] + bits[2] + bits[3];
ham_code[4] = bits[1];
ham_code[5] = bits[2];
ham_code[6] = bits[3];

for(int h=0; h<7; h++){
temp = ham_code[h];
ham_code[h] = temp%2;
temp = 0;
}

for(int e=0; e<7; e++){
cout << ham_code[e];
}
cout << endl;

return 0;
}
int main(){

string usr_input;
string msg;
int index(0);

cout << "Hamming Code Program" << endl;

while(true){

cout << endl << ": ";
getline(cin, usr_input);

if(usr_input.find("gen") != std::string::npos){
for(int i=0; i<usr_input.length(); i++){
if(usr_input.at(i) == ' '){
index = i;
}
}

for(int j=index; j<usr_input.length(); j++){
msg+=usr_input.at(j);
}

cout << "Hamming code (7,4): ";
gen_hamming_code(msg);
}
}
}

Я использовал определение линейной алгебры, предоставленное Википедией («Код Хэмминга (7,4)»). В нескольких местах программы я напечатал содержимое переменной, но исправление одной проблемы привело к другой. Чтобы проверить правильность вывода, я сравнил его с примером, доступным в Википедии, и результатом, полученным онлайн калькулятор.

ОБНОВЛЕНО: Вопрос решен. Я использовал адаптацию предоставленного алгоритма Вот (без AMP).

0

Решение

Ну это неправильно

ham_code[0] = bits[0] + bits[1] + bits[3];

Коды Хэмминга определяются с использованием арифметики GF (2). Добавление в GF (2) — оператор C ++ xor (^). Используйте правильный оператор, и вы можете покончить с последующим %2 петля.

Вы также смешали биты четности с открытым текстом, чего я никогда не делал, когда узнал об этом. Кроме того, онлайн-симулятор использует простой порядок (открытый текст, четность) без чередования.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]