PHP を使用してハミング エンコーダー/デコーダーを作成しようとしていますが、パリティ ビットの計算に頭を悩ませようとしています。
これまでのところ、私のスクリプトでは数値を入力し、その数値を 8421 コード (BCD) またはグレイ コードでエンコードして、エンコードされた数値を画面に表示することができます。また、Gray と BCD のコード シーケンスをハードコーディングすることにしました。
入力できる数値の最大サイズは 32 ビット (40 億) であるため、そのサイズの数値を入力すると、ハミング コードで 40 データ ビットが必要になります。
私が望むものの基本的な考え方は、ユーザーが数値を入力すると、その数値がグレイ コード/8421 に変換され、次にハミング コードに変換されるというものです。その後、ユーザーは番号をデコードするオプションを利用できます。
私が抱えている問題は、パリティ ビットを動的に生成し、必要に応じて計算するアルゴリズムを理解できないように見えることです。以下に関連するコードを含めました。
ありがとうございました!
エンコード.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は単なる入出力スクリプトであり、そこには何も表示されません。