PHPで16進数変換(バイナリ、8進数、16進数)と相互変換コードを実現_PHPチュートリアル

WBOY
リリース: 2016-07-21 15:34:09
オリジナル
748 人が閲覧しました

10 進数を 2 進数、8 進数、16 進数に変換します
10 進数から他の基数に変換するには、その数値を変換する基数で割って余りを読み取るだけです。それらを接続するだけです。

コードをコピーします コードは次のとおりです:

/**
*10 進数から 2 進数、8 進数、または 16 進数に変換する場合は、欠落している桁の前にゼロを追加します*
*
* @param array $datalist Incoming data array(100,123,130)
* @param int $bin 変換された基数は次のようになります: 2 ,8,16
* @return array Return data array() データ変換せずに形式を返します
* @copyright chengmo QQ:8292669
*/
function decto_bin($datalist,$bin)
{
static $arr=array( 0,1, 2,3,4,5,6,7,8,9,'A','B','C','D','E','F'); ($datalist) ) $datalist=array($datalist);
if($bin==10)return $datalist; //同じベースは無視されます
$bytelen=ceil(16/$bin); $bin ベース、1 バイトの長さ
$aOutChar=array();
foreach ($datalist as $num)
{
$num=intval($num); num=== 0)続行;
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; //長さが1バイトに満たない場合は、自動的に先頭に0が追加されます
}
$aOutChar[]=$t;
}
return $aOutChar;
}


テスト:
var_dump(decto_bin(array(128,253) ),2));
var_dump(decto_bin(array(128,253),16)); Powered-By: PHP/5.2.0
Content-type: text/html
array(2) {
[0]=>
string(8) "10000000"
string(8) "11111101"
}
配列(2) {
[0]=>
文字列(4) "0200"
[1]=>
文字列(4) "0375"
}
配列(2) {
[0]=>
string(2) " 80"
[1]=>
string(2) "FD"
}
2 進数、8 進数、16 進数から 10 進数への変換
この変換では、1101 から 1101 までの乗算が使用されます。 10 進数: 1*2^3+1* 2^2+0*2^1+1*2^0
コード:




コードをコピー

コードは次のとおりです:


/***2 進数、8 進数、16 進数から 10 進数へ* * * @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 として $tv)
{
$tv=strtoupper($tv);
if(array_key_exists($tv,$arr)) $arr[$tv]==0)続行 ;
$total=$total+$arr[$tv]*pow($bin,$atlen-$i)
}
$aOutData[] =$total;
}
return $aOutData;


テスト:
var_dump(array('ff','ff33','cc33'),16)); 1101101','111101101'),2)) ;
var_dump(bin_todec(array('1234123','12341'),8));

X-Powered-By: PHP/5.2.0
コンテンツタイプ: text/html
array(3) {
[0]=>
int(255)
[1]=>
[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.bkjia.com/PHPjc/322507.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/322507.html

技術記事

10 進数から 2 進数、8 進数、または 16 進数に変換する場合、または 10 進数から他の基数に変換する場合は、数値を変換する基数で割った余りを読み取ります。それらを接続するだけです...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!