本文共 3536 字,大约阅读时间需要 11 分钟。
进制转换是计算机领域中的一个基础知识点,涉及将数据从一种进制转换为另一种进制。十进制与其他进制(如二进制、八进制、十六进制)之间的转换是最常见的需求之一。下面将详细介绍十进制到其他进制的转换方法,以及如何将其他进制转换回十进制。
将十进制数转换为其他进制,可以使用以下基本方法:
/** * 十进制转二进制、八进制、十六进制 * 不足位数前面补零 * * @param array $datalist 传入数据 array(100,123,130) * @param int $bin 转换的进制可以是:2,8,16 * @return array 返回数据 */function dec_to_bin($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; } $bytelen = ceil(16 / $bin); $aOutChar = array(); foreach ($datalist as $num) { $t = ""; $num = intval($num); if ($num === 0) { continue; } while ($num > 0) { $t .= $arr[$num % $bin]; $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; } $aOutChar[] = $t; } return $aOutChar;}// 测试用例var_dump(decto_bin(array(128, 253), 2)); var_dump(decto_bin(array(128, 253), 8)); var_dump(decto_bin(array(128, 253), 16)); 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 = 8 + 4 + 0 + 1 = 13
2^n,八进制为 8^n,十六进制为 16^n)。/** * 二进制、八进制、十六进制转十进制 * * @param array $datalist 传入数据 array('ff','ff33','cc33') * @param int $bin 转换的进制可以是:2,8,16 * @return array 返回数据 */function bin_to_dec($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; } $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 += $arr[$tv] * pow($bin, $atlen - $i); $i++; } } $aOutData[] = $total; } return $aOutData;}// 测试用例var_dump(bin_to_dec(array('ff','ff33','cc33'), 16)); var_dump(bin_to_dec(array('1101101','111101101'), 2)); var_dump(bin_to_dec(array('1234123','12341'), 8)); 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内置的函数如 bindec(), decoct(), dechex() 等。这些函数可以直接完成进制转换任务,简化了代码编写过程。
转载地址:http://kwtfk.baihongyu.com/