Я пытаюсь создать кодер / декодер Хэмминга, используя PHP, и я пытался обернуть голову вокруг вычисления битов четности.
Пока что в моем скрипте вы можете ввести число, кодировать его в коде 8421 (BCD) или коде Грея и отображать закодированное число на экране. Я также прибегнул к жесткому кодированию кодовых последовательностей Грея и BCD.
Максимальный размер числа, которое вы можете ввести, составляет 32 бита (4 миллиарда), поэтому, если вы введете число такого размера, вам понадобится 40 бит данных в вашем коде Хэмминга.
Основная идея того, что я хочу: пользователь вводит число, которое преобразуется в код Грея / 8421, а затем в код Хэмминга. После этого пользователь имеет возможность декодировать номер.
У меня проблема в том, что я не могу понять алгоритм, который будет динамически генерировать биты четности и вычислять их по мере необходимости. Я включил соответствующий код ниже.
Спасибо!
encode.php
session_start();if ( !isset($_POST['num_to_convert']) || !is_numeric($_POST['num_to_convert']) ){
$_SESSION['redirect']=1;
header ('Location: form.php');
}
else{$method=$_POST['metoda'];
$number=$_POST['num_to_convert'];
$string="$_POST[num_to_convert]";
$to_convert=str_split($string);
$encoded_value='';
// Pentru metoda 8421
if($method=='8421')
{
foreach($to_convert as $value)
{
switch($value){
case 0:
$encoded_value.="0000";
break;
case 1:
$encoded_value.="0001";
break;
case 2:
$encoded_value.="0010";
break;
case 3:
$encoded_value.="0011";
break;
case 4:
$encoded_value.="0100";
break;
case 5:
$encoded_value.="0101";
break;
case 6:
$encoded_value.="0110";
break;
case 7:
$encoded_value.="0111";
break;
case 8:
$encoded_value.="1000";
break;
case 9:
$encoded_value.="1001";
break;
}
}
}// Pentru metoda Gray
if($method=='Gray')
{
foreach($to_convert as $value)
{
switch($value){
case 0:
$encoded_value.="0000";
break;
case 1:
$encoded_value.="0001";
break;
case 2:
$encoded_value.="0010";
break;
case 3:
$encoded_value.="0011";
break;
case 4:
$encoded_value.="0110";
break;
case 5:
$encoded_value.="0111";
break;
case 6:
$encoded_value.="0101";
break;
case 7:
$encoded_value.="0100";
break;
case 8:
$encoded_value.="1100";
break;
case 9:
$encoded_value.="1101";
break;
}
}
}$_SESSION['num_to_convert']=$_POST['num_to_convert'];
$_SESSION['encoded_value']=$encoded_value;
$_SESSION['method']=$method;
header('Location: form.php');
}
form.php это просто сценарий ввода и вывода, там ничего не видно.
Задача ещё не решена.
Других решений пока нет …