1

我正在尝试使用 PHP 创建一个汉明编码器/解码器,并且我一直在努力解决计算奇偶校验位的问题。

到目前为止,在我的脚本中,您可以输入一个数字,将该数字编码为 8421 码 (BCD) 或格雷码,并将编码后的数字显示在屏幕上。我还对格雷码和 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只是输入和输出脚本,在那里什么都看不到。

4

0 回答 0