ホームページ >php教程 >php手册 >PHPは16進数変換(2進数、8進数、16進数)と相互変換コードを実装しています。

PHPは16進数変換(2進数、8進数、16進数)と相互変換コードを実装しています。

WBOY
WBOYオリジナル
2016-06-21 08:56:191181ブラウズ

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

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


/**
*10 進数から 2 進数、8 進数、または 16 進数に変換する場合は、欠落している桁の前にゼロを追加します*
*
* @param array $datalist データ配列(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');
if(!is_array($datalist)); $datalist=array($datalist);
if($bin==10)return $datalist; //同じベースは無視されます
$bytelen=ceil(16/$bin) // $ bin を取得します。ベース、1 バイトの長さ
$aOutChar=array();
foreach ($datalist as $num)
{
$t=""; 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; //長さは 1 バイト未満で、自動的に前に追加されます。 0
}
$aOutChar[]=$t;
return $aOutChar
}


テスト:
var_dump(decto_bin(array(128,253),2));

var_dump(decto_bin(array(128,253),8)); ));

X-Powered-By: PHP/5.2.0
コンテンツタイプ: text/html
array(2) {
[0]=>文字列(8) "10000000"
[1]=>
文字列(8) "11111101"
}
配列(2) {
[0]=>文字列(4) "0200"
[1]=>
文字列(4) "0375"
}
配列(2) {
[0]=> string(2) "80"
[1]=>
string(2) "FD"
}
2 進数、8 進数、16 進数から 10 進数への変換
この変換では、次のような乗算が使用されます。 : 1101 を 10 進数に変換: 1*2^3+1*2^2+0*2^1+1*2^0
コード:




コピーコード

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

/***2 進数、8 進数、16 進数から 10 進数へ* * * @param array $datalist 受信データ配列(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(); //配列を保存する出力を定義します
($datalist as $num)
{
$ atnum=str_split($num); // 文字列を単一の文字配列に分割します
$total=0; ($atnum を $tv)
{
$tv=strtoupper($tv);
if(array_key_exists($tv,$arr))
{
if($arr[ $ tv]==0)続行;
$total=$total+$arr[$tv]*pow($bin,$atlen-$i)
$i++>}
$aOutData[]=$total;
}
return $aOutData
}


テスト:
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
コンテンツ タイプ: text /html
array(3) {
[0]=>
int(255)
[1]=>

int(65331)
[2]=> ;
int(52275)
}
array(2) {
[0]=>
[1]=> 508)
}
array(2) {
[0]=>
int(342099)
int(5345)
}
後で説明しますが、これらは単なる実装方法であり、実際には、PHP 言語であろうと他の言語であろうと、実装の考え方は同じです。実際、PHP にはこれらの内容を完成させるための多くの組み込み関数があります:
bindec()、decoct()、dechex()、base_convert()、decbin() これは実装のアイデアにすぎません。ふふ!





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。