日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

php 实现进制相互转换

發(fā)布時間:2024/9/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 实现进制相互转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近的項(xiàng)目中需要用到進(jìn)制轉(zhuǎn)換,這個問題在剛剛接觸計(jì)算機(jī)理論時候,還是很會的,好久不用,居然模糊了……

從十進(jìn)制向其它進(jìn)制轉(zhuǎn)換,用的是就用該數(shù)字不斷除以要轉(zhuǎn)換的進(jìn)制數(shù),讀取余數(shù)。連接一起就可以了。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <?php /** ?*十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制 不足位數(shù)前面補(bǔ)零* ?* ?* @param array $datalist 傳入數(shù)據(jù)array(100,123,130) ?* @param int $bin 轉(zhuǎn)換的進(jìn)制可以是:2,8,16 ?* @return array 返回?cái)?shù)據(jù) array() 返回沒有數(shù)據(jù)轉(zhuǎn)換的格式 ?*/ function decto_bin($datalist,$bin) { ??static $arr=array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'); ??if(!is_array($datalist)) $datalist=array($datalist); ??if($bin==10)return $datalist; //相同進(jìn)制忽略 ??$bytelen=ceil(16/$bin); //獲得如果是$bin進(jìn)制,一個字節(jié)的長度 ??$aOutChar=array(); ??foreach ($datalist as $num) ??{ ????$t=""; ????$num=intval($num); ??if($num===0)continue; ????while($num>0) ????{ ??????$t=$arr[$num%$bin].$t; ??????$num=floor($num/$bin); ????} ????$tlen=strlen($t); ????if($tlen%$bytelen!=0) ????{ ????$pad_len=$bytelen-$tlen%$bytelen; ????$t=str_pad("",$pad_len,"0",STR_PAD_LEFT).$t; //不足一個字節(jié)長度,自動前面補(bǔ)充0 ????} ????$aOutChar[]=$t; ??} ??return $aOutChar; }

測試:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 var_dump(decto_bin(array(128,253),2)); var_dump(decto_bin(array(128,253),8)); var_dump(decto_bin(array(128,253),16)); X-Powered-By: PHP/5.2.0 Content-type: text/html array(2) { ?[0]=> ?string(8) "10000000" ?[1]=> ?string(8) "11111101" } array(2) { ?[0]=> ?string(4) "0200" ?[1]=> ?string(4) "0375" } array(2) { ?[0]=> ?string(2) "80" ?[1]=> ?string(2) "FD" }

二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)十進(jìn)制

這個轉(zhuǎn)換用乘法,如:1101 轉(zhuǎn)十進(jìn)制:1*2^3+1*2^2+0*2^1+1*2^0

代碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <?php /** ?*二進(jìn)制、八進(jìn)制、十六進(jìn)制 轉(zhuǎn)十進(jìn)制* ?* ?* @param array $datalist 傳入數(shù)據(jù)array(df,ef) ?* @param int $bin 轉(zhuǎn)換的進(jìn)制可以是:2,8,16 ?* @return array 返回?cái)?shù)據(jù) array() 返回沒有數(shù)據(jù)轉(zhuǎn)換的格式 ?* @copyright chengmo QQ:8292669 ?*/ function bin_todec($datalist,$bin) { ??static $arr=array('0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15); ??if(!is_array($datalist))$datalist=array($datalist); ??if($bin==10)return $datalist; //為10進(jìn)制不轉(zhuǎn)換 ??$aOutData=array(); //定義輸出保存數(shù)組 ??foreach ($datalist as $num) ??{ ????$atnum=str_split($num); //將字符串分割為單個字符數(shù)組 ????$atlen=count($atnum); ????$total=0; ????$i=1; ????foreach ($atnum as $tv) ????{ ??????$tv=strtoupper($tv); ???????? ??????if(array_key_exists($tv,$arr)) ??????{ ????????if($arr[$tv]==0)continue; ????????$total=$total+$arr[$tv]*pow($bin,$atlen-$i); ??????} ??????$i++; ????} ????$aOutData[]=$total; ??} ??return $aOutData; }

測試:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 var_dump(bin_todec(array('ff','ff33','cc33'),16)); var_dump(bin_todec(array('1101101','111101101'),2)); var_dump(bin_todec(array('1234123','12341'),8)); X-Powered-By: PHP/5.2.0 Content-type: text/html array(3) { ?[0]=> ?int(255) ?[1]=> ?int(65331) ?[2]=> ?int(52275) } array(2) { ?[0]=> ?int(124) ?[1]=> ?int(508) } array(2) { ?[0]=> ?int(342099) ?[1]=> ?int(5345) }

這些只是實(shí)現(xiàn)方式,其實(shí)不在乎php語言還是其它,實(shí)現(xiàn)思路都是一樣的。php其實(shí)內(nèi)置不少函數(shù)可以完成這些內(nèi)容:

bindec(),decoct(),dechex() base_convert() decbin() 這里只是實(shí)現(xiàn)思路而已。呵呵!


來源:http://www.jb51.net/article/82047.htm

總結(jié)

以上是生活随笔為你收集整理的php 实现进制相互转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。