PHP中十进制转十六进制最直接用dechex(),手动实现需模拟“除16取余、逆序排列”,注意0、负数、大小写及大数边界处理。

PHP 中实现十进制转十六进制,最直接的方法是使用内置函数 dechex(),但若需手动实现(如面试题、教学或理解进制转换原理),则应模拟“除16取余、逆序排列”的算法过程。
使用内置函数快速转换
PHP 提供了多个现成函数,适用于不同场景:
-
dechex($num):专用于非负整数十进制转小写十六进制字符串(如
dechex(255)→"ff") -
strtoupper(dechex($num)):转大写(如
"FF") -
sprintf("%X", $num):格式化输出,支持大写;
sprintf("%x", $num)为小写 -
base_convert($num, 10, 16):通用进制转换,支持负数(但注意:对负数结果含负号,如
base_convert(-255, 10, 16)→"-ff")
手动实现转换逻辑(不依赖内置函数)
核心思路:反复将十进制数除以 16,记录余数(0–15),对应十六进制字符 0-9, A-F,直到商为 0,再将余数倒序拼接。
示例代码:
立即学习“PHP免费学习笔记(深入)”;
function decToHex($n) {
if ($n == 0) return "0";
$hex = "";
$digits = "0123456789ABCDEF";
$negative = false;
if ($n < 0) {
$negative = true;
$n = -$n;
}
while ($n > 0) {
$remainder = $n % 16;
$hex = $digits[$remainder] . $hex;
$n = (int)($n / 16);
}
return $negative ? "-" . $hex : $hex;
}
// 测试:echo decToHex(255); // 输出 "FF"
注意事项与边界处理
- 输入为 0 时需单独返回
"0",否则循环不执行,结果为空字符串 - 负数需先标记再转正处理,避免模运算在 PHP 中对负数产生意外余数(如
-1 % 16得-1,而非15) - PHP 整型有平台限制(通常最大为
PHP_INT_MAX),超大数建议用bcmod+bcdiv配合字符串处理 - 十六进制字母大小写按需求统一,避免混用(如调试时推荐大写更易识别)
验证与测试建议
写完后可用以下典型值交叉验证:
0 → "0"10 → "A"16 → "10"255 → "FF"-16 → "-10"4096 → "1000"
对比 dechex() 或 sprintf() 输出,确保一致性。



















