破釜沉舟论坛 » WEB 开发 » 十进制与二十三进制转换 | 十进制与二十二进制转换

2007-2-6 17:43 php店小二
十进制与二十三进制转换 | 十进制与二十二进制转换

[code]
<?php
/**
* @file
* @version  1.0
* @author   网海浪子
* @date  2006-3-30
* @email sxf02615@163.com
* @brief   十进制与二十三进制转换 | 十进制与二十二进制转换*
*/
?>

<?php
/**
*
* @brief 十进制转换成二十二进制
*
* @param $num 十进制数
*
* @return 二十二进制数
*
*/
function get22NumBy10($num,$i=0)
{
$i++;
/*常量定义 开始*/
$num_e_22 = array(
    0=>"A",
    1=>"B",
    2=>"C",
    3=>"D",
    4=>"E",
    5=>"F",
    6=>"G",
    7=>"H",
    8=>"J",
    9=>"K",
    10=>"L",
    11=>"M",
    12=>"N",
    13=>"P",
    14=>"Q",
    15=>"R",
    16=>"S",
    17=>"T",
    18=>"W",
    29=>"X",
    20=>"Y",
    21=>"Z"
);
$bit_num = 22;
/*常量定义 结束*/

if($num<=0)
{
  if($i==1)
  {
   return $num_e_22[$num];
  }
  else
  {
   return "";
  }
}
else
{
  $old_end_num = $num;
  $new_end_num = floor($num/$bit_num);
  return get22NumBy10($new_end_num,$i).$num_e_22[$old_end_num%$bit_num];
}
}

/**
*
* @brief 二十二进制转换成十进制
*
* @param $num 二十二进制数
*
* @return 十进制数
*
*/
function get10NumBy22($num_22)
{
/*常量定义 开始*/
$num_e_22 = array(
    "A"=>0,
    "B"=>1,
    "C"=>2,
    "D"=>3,
    "E"=>4,
    "F"=>5,
    "G"=>6,
    "H"=>7,
    "J"=>8,
    "K"=>9,
    "L"=>10,
    "M"=>11,
    "N"=>12,
    "P"=>13,
    "Q"=>14,
    "R"=>15,
    "S"=>16,
    "T"=>17,
    "W"=>18,
    "X"=>19,
    "Y"=>20,
    "Z"=>21
);
$bit_num = 22;
/*常量定义 结束*/

$leng = strlen($num_22)-1;
$i = 0;
$num_10 = 0;
while(substr($num_22,$i,1))
{
  $num_10 += $num_e_22[$num_22[$i]]*pow($bit_num,$leng);
  $i++;
  $leng--;
}
return $num_10;
}



/**
*
* @brief 十进制转换成二十三进制
*
* @param $num 十进制数
*
* @return 二十三进制数
*
*/
function get23NumBy10($num,$i=0)
{
$i++;
/*常量定义 开始*/
$num_e_23 = array(
    0=>"A",
    1=>"B",
    2=>"C",
    3=>"D",
    4=>"E",
    5=>"F",
    6=>"G",
    7=>"H",
    8=>"J",
    9=>"K",
    10=>"L",
    11=>"M",
    12=>"N",
    13=>"P",
    14=>"Q",
    15=>"R",
    16=>"S",
    17=>"T",
    18=>"V",
    19=>"W",
    20=>"X",
    21=>"Y",
    22=>"Z"
);
$bit_num = 23;
/*常量定义 结束*/

if($num<=0)
{
  if($i==1)
  {
   return $num_e_23[$num];
  }
  else
  {
   return "";
  }
}
else
{
  $old_end_num = $num;
  $new_end_num = floor($num/$bit_num);
  return get23NumBy10($new_end_num,$i).$num_e_23[$old_end_num%$bit_num];
}
}

/**
*
* @brief 二十三进制转换成十进制
*
* @param $num 二十三进制数
*
* @return 十进制数
*
*/
function get10NumBy23($num_23)
{
/*常量定义 开始*/
$num_e_23 = array(
    "A"=>0,
    "B"=>1,
    "C"=>2,
    "D"=>3,
    "E"=>4,
    "F"=>5,
    "G"=>6,
    "H"=>7,
    "J"=>8,
    "K"=>9,
    "L"=>10,
    "M"=>11,
    "N"=>12,
    "P"=>13,
    "Q"=>14,
    "R"=>15,
    "S"=>16,
    "T"=>17,
    "V"=>18,
    "W"=>19,
    "X"=>20,
    "Y"=>21,
    "Z"=>22
);
$bit_num = 23;
/*常量定义 结束*/

$leng = strlen($num_23)-1;
$i = 0;
$num_10 = 0;
while(substr($num_23,$i,1))
{
  $num_10 += $num_e_23[$num_23[$i]]*pow($bit_num,$leng);
  $i++;
  $leng--;
}
return $num_10;
}
?>
[/code]

[[i] 本帖最后由 php店小二 于 2007-2-6 17:44 编辑 [/i]]

2007-2-7 17:32 php店小二
优化了递归算法后的代码
[code]
<?php
/**
* @file
* @version  1.0
* @author   网海浪子
* @date  2006-3-30
* @email sxf02615@163.com
* @brief   十进制与二十三进制转换 | 十进制与二十二进制转换*
*/
?>

<?php
/**
*
* @brief 十进制转换成二十二进制
*
* @param $num 十进制数
*
* @return 二十二进制数
*
*/
function get22NumBy10($num,$i=0)
{
        $i++;
        /*常量定义 开始*/
        $num_e_22 = array(
                                0=>"A",
                                1=>"B",
                                2=>"C",
                                3=>"D",
                                4=>"E",
                                5=>"F",
                                6=>"G",
                                7=>"H",
                                8=>"J",
                                9=>"K",
                                10=>"L",
                                11=>"M",
                                12=>"N",
                                13=>"P",
                                14=>"Q",
                                15=>"R",
                                16=>"S",
                                17=>"T",
                                18=>"W",
                                29=>"X",
                                20=>"Y",
                                21=>"Z"
        );
        $bit_num = 22;
        /*常量定义 结束*/

        if($num<$bit_num)
        {
                return $num_e_22[$num];
        }
        else
        {
                $old_end_num = $num;
                $new_end_num = floor($num/$bit_num);
                return get22NumBy10($new_end_num,$i).$num_e_22[$old_end_num%$bit_num];
        }
}

/**
*
* @brief 二十二进制转换成十进制
*
* @param $num 二十二进制数
*
* @return 十进制数
*
*/
function get10NumBy22($num_22)
{
        /*常量定义 开始*/
        $num_e_22 = array(
                                "A"=>0,
                                "B"=>1,
                                "C"=>2,
                                "D"=>3,
                                "E"=>4,
                                "F"=>5,
                                "G"=>6,
                                "H"=>7,
                                "J"=>8,
                                "K"=>9,
                                "L"=>10,
                                "M"=>11,
                                "N"=>12,
                                "P"=>13,
                                "Q"=>14,
                                "R"=>15,
                                "S"=>16,
                                "T"=>17,
                                "W"=>18,
                                "X"=>19,
                                "Y"=>20,
                                "Z"=>21
        );
        $bit_num = 22;
        /*常量定义 结束*/

        $leng = strlen($num_22)-1;
        $i = 0;
        $num_10 = 0;
        while(substr($num_22,$i,1))
        {
                $num_10 += $num_e_22[$num_22[$i]]*pow($bit_num,$leng);
                $i++;
                $leng--;
        }
        return $num_10;
}



/**
*
* @brief 十进制转换成二十三进制
*
* @param $num 十进制数
*
* @return 二十三进制数
*
*/
function get23NumBy10($num)
{
        /*常量定义 开始*/
        $num_e_23 = array(
                                0=>"A",
                                1=>"B",
                                2=>"C",
                                3=>"D",
                                4=>"E",
                                5=>"F",
                                6=>"G",
                                7=>"H",
                                8=>"J",
                                9=>"K",
                                10=>"L",
                                11=>"M",
                                12=>"N",
                                13=>"P",
                                14=>"Q",
                                15=>"R",
                                16=>"S",
                                17=>"T",
                                18=>"V",
                                19=>"W",
                                20=>"X",
                                21=>"Y",
                                22=>"Z"
        );
        $bit_num = 23;
        /*常量定义 结束*/

        if($num<$bit_num)
        {
                return $num_e_23[$num];
        }
        else
        {
                $old_end_num = $num;
                $new_end_num = floor($num/$bit_num);
                return get23NumBy10($new_end_num).$num_e_23[$old_end_num%$bit_num];
        }
}

/**
*
* @brief 二十三进制转换成十进制
*
* @param $num 二十三进制数
*
* @return 十进制数
*
*/
function get10NumBy23($num_23)
{
        /*常量定义 开始*/
        $num_e_23 = array(
                                "A"=>0,
                                "B"=>1,
                                "C"=>2,
                                "D"=>3,
                                "E"=>4,
                                "F"=>5,
                                "G"=>6,
                                "H"=>7,
                                "J"=>8,
                                "K"=>9,
                                "L"=>10,
                                "M"=>11,
                                "N"=>12,
                                "P"=>13,
                                "Q"=>14,
                                "R"=>15,
                                "S"=>16,
                                "T"=>17,
                                "V"=>18,
                                "W"=>19,
                                "X"=>20,
                                "Y"=>21,
                                "Z"=>22
        );
        $bit_num = 23;
        /*常量定义 结束*/

        $leng = strlen($num_23)-1;
        $i = 0;
        $num_10 = 0;
        while(substr($num_23,$i,1))
        {
                $num_10 += $num_e_23[$num_23[$i]]*pow($bit_num,$leng);
                $i++;
                $leng--;
        }
        return $num_10;
}

echo "<br>";
echo $result = get23NumBy10(23);
echo "<br>";
echo get10NumBy23($result);

echo "<br>";
echo $result = get22NumBy10(22);
echo "<br>";
echo get10NumBy22($result);
?>
[/code]

2007-2-27 19:53 晨风
学习了~~~多谢楼主~

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.