php 实现进制转换(二进制、八进制、十六进制)互相转换
不断除以目标进制数:将十进制数除以目标进制(如2、8、16),并记录余数。 读取余数并连接:转换后的数值即为目标进制的各位数字,读取余数的顺序即为最终结果。 不足位数补零:如果转换结果的位数少于目标进制所需的字节数,需在前面补零以确保位数完整。
从左到右每一位乘以进制数的相应次方:例如,二进制数 逐位处理:将每一位的数字值乘以对应的权值(如二进制中的权值为
发布日期:2025-05-03 00:23:35
浏览次数:12
分类:精选文章
本文共 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() 等。这些函数可以直接完成进制转换任务,简化了代码编写过程。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2026年05月24日 04时14分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
2023-03-01
php数组函数分析--array_column
2023-03-01
php数组去重复数据的小例子
2023-03-01
php数组实现:哈希 +双向链表
2023-03-01
PHP数组排序函数array_multisort()函数详解(二)
2023-03-01
php数组的几个函数和超全局变量
2023-03-01
PHP文件上传详解
2023-03-01
PHP文件锁
2023-03-01
php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
2023-03-01
PHP时间戳和日期相互转换操作总结
2023-03-01
php时间戳知识点,php 时间戳函数总结与示例
2023-03-01
php更新数据库失败,php – 无法更新MySQL数据库
2023-03-01
php机器人聊天对话框,基于AIML的PHP聊天机器人
2023-03-01
PHP查找数组中最大值与最小值
2023-03-01
php查最大值,在PHP数组中查找最大值
2023-03-01
php根据年月日计算年龄
2023-03-01
RabbitMQ - 单机部署(超详细)
2023-03-01
php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
2023-03-01
php模拟发送GET和POST请求
2023-03-01