PDA

View Full Version : حرفه ای: تبدیل عدد ( دسیمال ) به هر مبنایی در php



aalmair
شنبه 04 آبان 1392, 14:40 عصر
http://code.aalma.ir/article.php?c=1
(http://code.aalma.ir/article.php?c=1)


جهت تبدیل به هر مبنایی جدول مبنای مورد نظر را در خط سوم قرار دهید
برای مثال :
باینری = '01'
هشتایی = '01234567'
64 تایی = '_-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx yz0123456789'


کاریرد اصلی این قطعه کد فشرده سازی یک عدد و در سایت های مثل "کوتاه کننده ی آدرس وب سایت" استفاده می شود




<?php
header("Content-Type: text/html; charset=utf-8");

class BaseConvert{

var $chars='0123456789abcdef'; // convert to hex


public function __construct(){
$table=$this->chars;
$size=strlen($table);
if($size<=1){
die('تعداد کاراکتر ها بیشتر از یک می باشد.') ;
}
for($i=0;$i<$size;$i++){
for($j=0;$j<$i;$j++){
if($table[$i]==$table[$j]){
die('کاراکتر تکراری غیر مجاز است') ;
}
}

}

}
public function number2base($int_str=""){
$size_int=strlen($int_str) ;
$t=0;
$table=$this->chars;
$size_table=strlen($table);

while($t<$size_int&&$int_str[$t]==" "){
$t++;
}
$size_int-=$t;
$int_str=substr($int_str,$t);


if(!is_numeric($int_str)) {
return 0;
}else{
for($j=0;$j<$size_int;$j++){
if($int_str[$j]=="."){
return 0;
}
}
}



$rev=array();
$res="";

while($int_str>=1){

$rev[]=bcmod($int_str,$size_table);


$int_str=bcdiv ($int_str,$size_table);

}
for($i=count($rev)-1;$i>=0;$i--){

$res.=$table[$rev[$i]];


}
return($res);

}
public function base2number($str=""){

$table=$this->chars;
$size_str=strlen($str);
$size_table=strlen($table);

$rev=array();
$res="0";


for($j=0;$j<$size_str;$j++){

$is_true=0;

for($i=0;$i<$size_table;$i++){

if($str[$j]==$table[$i]){
$is_true=1;
$res=bcmul($size_table,$res)+$i;
break;
}
}
if(!$is_true){
die('error');
return 0;
}



}

return ($res);





}

}




$t=new BaseConvert();
$number='255';
$en=$t->number2base($number);
$de=$t->base2number($en);

echo "<div dir=rtl><span>تبدیل : </span><span style='color:blue;font-size:150%;'>".$en."</span>";
echo '<br>';
echo "<span>برعکس :</span><span style='color:blue;font-size:150%;'>".$de."</span></div>";



?>

MRmoon
یک شنبه 05 آبان 1392, 17:41 عصر
بهتر نبود تو قسمت اسنايپت ها مي نوشتيد؟

aalmair
دوشنبه 06 آبان 1392, 08:06 صبح
منظورت رو نفهمیدم . من تازه اومدم

MMSHFE
دوشنبه 06 آبان 1392, 09:11 صبح
توی این تاپیک (http://barnamenevis.org/showthread.php?215150-snippet-%D9%87%D8%A7%DB%8C-php) کدهاتون رو بگذارین.