日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 实现进制相互转换

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

最近的項目中需要用到進制轉換,這個問題在剛剛接觸計算機理論時候,還是很會的,好久不用,居然模糊了……

從十進制向其它進制轉換,用的是就用該數字不斷除以要轉換的進制數,讀取余數。連接一起就可以了。

?
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 /** ?*十進制轉二進制、八進制、十六進制 不足位數前面補零* ?* ?* @param array $datalist 傳入數據array(100,123,130) ?* @param int $bin 轉換的進制可以是:2,8,16 ?* @return array 返回數據 array() 返回沒有數據轉換的格式 ?*/ 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; //相同進制忽略 ??$bytelen=ceil(16/$bin); //獲得如果是$bin進制,一個字節的長度 ??$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; //不足一個字節長度,自動前面補充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" }

二進制、八進制、十六進制轉十進制

這個轉換用乘法,如:1101 轉十進制: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 /** ?*二進制、八進制、十六進制 轉十進制* ?* ?* @param array $datalist 傳入數據array(df,ef) ?* @param int $bin 轉換的進制可以是:2,8,16 ?* @return array 返回數據 array() 返回沒有數據轉換的格式 ?* @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進制不轉換 ??$aOutData=array(); //定義輸出保存數組 ??foreach ($datalist as $num) ??{ ????$atnum=str_split($num); //將字符串分割為單個字符數組 ????$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) }

這些只是實現方式,其實不在乎php語言還是其它,實現思路都是一樣的。php其實內置不少函數可以完成這些內容:

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


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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。