我正在尝试使用PHP创建一个汉明编码器/解码器,而我一直试图围绕计算奇偶校验位。
到目前为止,在我的脚本中,您可以输入一个数字,将该数字编码为8421代码(BCD)或格雷码,并将编码后的数字显示在屏幕上。我还采用了硬编码格雷和BCD码序列。
您输入的数字的最大大小为32位(40亿),因此如果输入该数量的数字,则汉明码中将需要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 只是输入和输出脚本,没有什么可看的。