在 PHP 8.x 中,“换进制”首先是一个数据契约问题:输入是受平台位宽限制的整数,还是需要保留前导零的数字字符串?输出要参与计算,还是仅用于显示?先回答这些问题,才能避免把无效字符、浮点近似值或字节编码误当成正确的整数转换。
本文只使用无敏感信息的示例。所有来自请求、文件或数据库的字符串都应先按应用约定完整验证,再交给转换函数。
Table of Contents
先看结论
decbin()、decoct()、dechex()接受int,返回不带前缀、不带填充的数字字符串。bindec()、octdec()、hexdec()接受字符串,结果可能是int,超出本机整数范围时可能是float;需要精确整数时必须拒绝后一种结果。base_convert()在 2 到 36 进制之间返回字符串,但官方明确警告大数可能因内部浮点处理而丢失精度。- 这些解析函数会忽略无效字符,并从 PHP 7.4 起对此发出弃用提示。不要依赖这种宽松行为;应在转换前验证整个字符串。
- 前导零、
0b/0o/0x前缀和字母大小写属于输入或显示格式,不是数值本身。策略应显式写入接口契约。
先记录实际运行环境;不能把开发机的 64 位结果假定为所有部署环境的结果:
<?php
declare(strict_types=1);
printf(
"PHP %s, native integer width: %d bits%s",
PHP_VERSION,
PHP_INT_SIZE * 8,
PHP_EOL
);
函数选择矩阵
| 需求 | 函数 | 输入 | 输出 | 主要边界 |
|---|---|---|---|---|
| 十进制整数转二进制文本 | decbin() |
int |
string |
本机 int 位宽;负数呈现为平台相关的无符号位模式 |
| 十进制整数转八进制文本 | decoct() |
int |
string |
本机 int 位宽;不添加 0o |
| 十进制整数转十六进制文本 | dechex() |
int |
string |
本机 int 位宽;负数按无符号处理;输出小写 |
| 二、八、十六进制文本转数值 | bindec() / octdec() / hexdec() |
string |
int|float |
无效字符会被忽略;大值可能变成不精确的 float |
| 2–36 进制文本互转 | base_convert() |
string、两个进制 |
string |
大数可能丢精度;输出字母为小写 |
显示格式与数值要分开存放。例如字符串 "0011" 和 "11" 都表示二进制数 3,但前者还包含“宽度为 4”的显示信息。
第一步:定义并验证字符串契约
下面的验证器采用一条窄而清晰的约定:只接受 2–36 进制的无符号、无前缀 ASCII 数字;不自动去空白,不接受分隔符或下划线。前导零允许保留。若产品需要符号或前缀,应先验证完整外层格式,再显式拆除符号或前缀,而不是让转换函数“猜”。
<?php
declare(strict_types=1);
function validBaseDigits(string $digits, int $base): bool
{
if ($digits === '' || $base < 2 || $base > 36) {
return false;
}
$alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
foreach (str_split(strtolower($digits)) as $digit) {
$value = strpos($alphabet, $digit);
if ($value === false || $value >= $base) {
return false;
}
}
return true;
}
这个验证器会接受 000110 和 00FF,但拒绝 0b1010、0x2f、空白、负号以及超出进制的数字。PHP 源码里的 0b、0o、0x 是整数字面量语法;不能由此推断任意输入字符串也应接受这些前缀。
若十进制输入来自 HTTP,请也把它当字符串处理。FILTER_VALIDATE_INT 可以验证本机范围内的十进制整数,但要用严格比较区分合法的 0 与失败,并事先决定是否允许空白、正号和前导零。不要先强制转型;PHP 对“以数字开头的字符串”的转换规则并不是输入验证器。
$rawDecimal = '47';
if ($rawDecimal !== trim($rawDecimal)) {
throw new InvalidArgumentException('Whitespace is not allowed');
}
$decimal = filter_var($rawDecimal, FILTER_VALIDATE_INT);
if (!is_int($decimal)) {
throw new RangeException('Expected a native-range decimal integer');
}
第二步:只在本机整数范围内转换
对二、八、十六进制字符串,先完整验证,再检查返回类型。只要结果是 float,就不要强制转换回 int,因为精度可能已经丢失。
function toNativeInt(string $digits, int $base): int
{
if (!validBaseDigits($digits, $base)) {
throw new InvalidArgumentException('Invalid digits for the declared base');
}
$value = match ($base) {
2 => bindec($digits),
8 => octdec($digits),
16 => hexdec($digits),
default => throw new InvalidArgumentException(
'Use this native-integer helper only with base 2, 8, or 16'
),
};
if (!is_int($value)) {
throw new RangeException('Value exceeds the native integer range');
}
return $value;
}
反向转换要求调用方已经持有真正的 int:
$value = 47;
$binary = decbin($value); // 101111
$octal = decoct($value); // 57
$hex = dechex($value); // 2f
PHP 的 int 是有符号且位宽随平台变化,可用 PHP_INT_SIZE、PHP_INT_MIN 和 PHP_INT_MAX 检查。PHP 没有无符号 int 类型。decbin(-1)、decoct(-1) 和 dechex(-1) 会产生与平台位宽相关的无符号位模式,并不会输出 -1。如果接口要的是带符号的文本表示,应单独处理符号,并特别拦截 PHP_INT_MIN,因为其绝对值无法放入同一有符号 int:
function signedHex(int $value): string
{
if ($value === PHP_INT_MIN) {
throw new RangeException('PHP_INT_MIN needs arbitrary-length handling');
}
return $value < 0
? '-' . dechex(-$value)
: dechex($value);
}
不要把浮点数传给这些整数函数,也不要把超范围字符串先转成 float 再转回来。超出整数范围的浮点转整数结果可能未定义。
第三步:把显示格式与数值分开
decbin()、decoct()、dechex() 和 base_convert() 不保留输入前导零,也不自动添加进制前缀。dechex() 与 base_convert() 的字母输出为小写。需要固定宽度、大写或前缀时,在转换成功后单独格式化:
$numericValue = 47;
$digits = strtoupper(str_pad(dechex($numericValue), 4, '0', STR_PAD_LEFT));
$display = '0x' . $digits;
echo $display; // 0x002F
$numericValue 仍是 47;$digits 与 $display 是展示字符串。固定宽度还隐含上限:若结果长于目标宽度,应报错或扩展宽度,不能从左侧截断。
第四步:谨慎使用 base_convert()
base_convert($num, $fromBase, $toBase) 支持 2–36 进制,输入字母不区分大小写,输出使用小写字母。它适合已验证、规模受控的标识符或显示转换;不适合要求任意长度精确性的数字。
$source = '00ff';
if (!validBaseDigits($source, 16)) {
throw new InvalidArgumentException('Invalid hexadecimal digits');
}
$binary = base_convert($source, 16, 2);
echo $binary; // 11111111
转换后前导零消失,因为结果表示的是数值。若 00ff 的四字符宽度有业务意义,应另存宽度或原始规范化显示值。
不要把 bin2hex() 当成进制转换
bin2hex() 把字符串的字节编码成十六进制。它不会把字符 "10" 当作二进制数字 2:
echo bin2hex('10'); // 3130: ASCII bytes for "10"
echo base_convert('10', 2, 16); // 2: binary digits to hexadecimal
处理文件、协议帧或加密字节时,bin2hex() 可能正是所需工具;处理由 0 和 1 组成的数字文本时,则应先验证后做进制转换。
超出本机位宽:使用明确的任意长度方案
当值可能超过 PHP_INT_MAX,不要把 bindec()、octdec() 或 hexdec() 返回的 float 当作精确结果,也不要依赖 base_convert()。PHP 的 GMP 扩展提供任意长度整数:gmp_init() 可按显式进制解析字符串,gmp_strval() 可按目标进制输出字符串。
if (!extension_loaded('gmp')) {
throw new RuntimeException('GMP extension is required');
}
$large = gmp_init('ffffffffffffffff', 16);
$decimal = gmp_strval($large, 10);
echo $decimal; // 18446744073709551615
仍应先用与输入进制匹配的规则验证字符串;显式传入进制可避免自动前缀探测的歧义。本机没有安装 GMP,因此上面这段只按 PHP 官方 API 和示例边界做了静态核对,没有本地执行。
BCMath 是任意精度的十进制字符串数学扩展,不是 base_convert() 的通用 2–36 进制替代品。只有当业务数据本来就是经过验证的十进制字符串、且需要十进制运算时才选择 BCMath;不要经过 float 中转。
Web 输出安全
验证转换结果不等于完成 HTML 上下文编码。受控的进制数字本身只含 ASCII 字符,但统一在模板边界调用 htmlspecialchars() 更稳健,尤其是字符串还要与其他动态内容组合时:
header('Content-Type: text/html; charset=UTF-8');
$rendered = strtoupper(str_pad(dechex(47), 4, '0', STR_PAD_LEFT));
echo '<output>'
. htmlspecialchars($rendered, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')
. '</output>';
不要把未经验证的原始输入回显到错误页,也不要把它写入公开日志。HTML 元素内容以外的 URL、JavaScript、CSS 或 HTTP 头部需要各自的上下文处理,不能只靠 htmlspecialchars()。
可重复的 PHP 8.x CLI 断言
下面的自包含测试不会依赖可能被禁用的 assert()。保存后用受支持的 PHP 8.x CLI 运行;任何不一致都会抛出异常并以非零状态结束。
<?php
declare(strict_types=1);
function expectSame(mixed $expected, mixed $actual): void
{
if ($expected !== $actual) {
throw new RuntimeException('Conversion assertion failed');
}
}
function validBaseDigits(string $digits, int $base): bool
{
if ($digits === '' || $base < 2 || $base > 36) {
return false;
}
$alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
foreach (str_split(strtolower($digits)) as $digit) {
$value = strpos($alphabet, $digit);
if ($value === false || $value >= $base) {
return false;
}
}
return true;
}
function toNativeInt(string $digits, int $base): int
{
if (!validBaseDigits($digits, $base)) {
throw new InvalidArgumentException('Invalid digits for the declared base');
}
$value = match ($base) {
2 => bindec($digits),
8 => octdec($digits),
16 => hexdec($digits),
default => throw new InvalidArgumentException(
'Use this native-integer helper only with base 2, 8, or 16'
),
};
if (!is_int($value)) {
throw new RangeException('Value exceeds the native integer range');
}
return $value;
}
function signedHex(int $value): string
{
if ($value === PHP_INT_MIN) {
throw new RangeException('PHP_INT_MIN needs arbitrary-length handling');
}
return $value < 0
? '-' . dechex(-$value)
: dechex($value);
}
expectSame('1100', decbin(12));
expectSame('410', decoct(264));
expectSame('2f', dechex(47));
expectSame(6, toNativeInt('000110', 2));
expectSame(15, toNativeInt('17', 8));
expectSame(47, toNativeInt('2F', 16));
expectSame(false, validBaseDigits('0b1010', 2));
expectSame(false, validBaseDigits('12oops', 10));
expectSame('11111111', base_convert('00ff', 16, 2));
expectSame('002F', strtoupper(str_pad(dechex(47), 4, '0', STR_PAD_LEFT)));
expectSame('-2f', signedHex(-47));
expectSame(str_repeat('1', PHP_INT_SIZE * 8), decbin(-1));
expectSame('3130', bin2hex('10'));
expectSame('2', base_convert('10', 2, 16));
echo "PHP ", PHP_VERSION, "; ", PHP_INT_SIZE * 8, "-bit; tests passed", PHP_EOL;
测试覆盖的是本机整数路径,并不证明超范围输入对 float 或 base_convert() 仍然精确。生产代码还应对实际允许的最小值、最大值、长度和输出宽度增加边界用例。
发布前检查清单
- 明确输入是本机整数、数字字符串还是任意长度整数。
- 为每个字段固定允许的进制、符号、前缀、大小写、长度和前导零规则。
- 转换前验证整个字符串;不要依赖无效字符被忽略。
- 对
bindec()、octdec()、hexdec()的结果检查is_int()。 - 不把超范围值经过
float,不把base_convert()用于需要任意长度精确性的值。 - 把数值、数字字符串与显示前缀/填充分别保存。
- 对负数明确选择“带符号文本”还是“固定位宽位模式”,并记录位宽。
- 在目标 PHP 版本和 32/64 位部署环境上运行边界测试。
- 在 HTML 模板边界编码输出,日志中不记录未经处理的原始输入。
官方资料
- PHP 整数类型与平台位宽
- decbin()、decoct()、dechex()
- bindec()、octdec()、hexdec()
- base_convert()
- PHP 数字字符串与 FILTER_VALIDATE_INT
- bin2hex() 与 str_pad()
- GMP:gmp_init() 与 gmp_strval()
- BCMath 任意精度十进制数学
- htmlspecialchars()
历史原文存档(仅供溯源)
以下内容逐字保留自
source_export的可见正文。没有删除、改写、空白规范化或隐私/安全删改。它反映 2011 年的 PHP 版本与说明,其中的位宽上限、宽松解析和函数使用方式不应作为当前建议。整个区块为惰性纯文本,不应执行或复制其中示例到生产环境。
PHP函数篇详解十进制、二进制、八进制和十六进制互相转换函数说明
主要掌握各进制转换的方法,以应用于实际开发。
Table of Contents
Toggle
- [十进制(decimal system)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%EF%BC%88decimal_system%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [十进制转二进制 decbin() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E4%BA%8C%E8%BF%9B%E5%88%B6_decbin_%E5%87%BD%E6%95%B0)
- [十进制转八进制 decoct() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%85%AB%E8%BF%9B%E5%88%B6_decoct_%E5%87%BD%E6%95%B0)
- [十进制转十六进制 dechex() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6_dechex_%E5%87%BD%E6%95%B0)
- [二进制(binary system)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BA%8C%E8%BF%9B%E5%88%B6%EF%BC%88binary_system%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [二进制转十制进 bindec() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BA%8C%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E5%88%B6%E8%BF%9B_bindec_%E5%87%BD%E6%95%B0)
- [二进制转十六制进 bin2hex() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BA%8C%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E5%85%AD%E5%88%B6%E8%BF%9B_bin2hex_%E5%87%BD%E6%95%B0)
- [八进制(octal system)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%85%AB%E8%BF%9B%E5%88%B6%EF%BC%88octal_system%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [八进制转十进制 octdec() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%85%AB%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E8%BF%9B%E5%88%B6_octdec_%E5%87%BD%E6%95%B0)
- [十六进制(hexadecimal)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%EF%BC%88hexadecimal%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [十六进制转十进制 hexdec()函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E8%BF%9B%E5%88%B6_hexdec%E5%87%BD%E6%95%B0)
- [任意进制转换 base_convert() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BB%BB%E6%84%8F%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2_base_convert_%E5%87%BD%E6%95%B0)
## 十进制(decimal system)转换函数说明
### 十进制转二进制 decbin() 函数
如下实例
1. echo decbin(12); //输出 1100
2. echo decbin(26); //输出 11010
**decbin**
(PHP 3, PHP 4, PHP 5)
decbin — 十进制转换为二进制
说明
string decbin ( int number )
返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 32 个 1 的字符串。
### 十进制转八进制 decoct() 函数
1. echo decoct(15); //输出 17
2. echo decoct(264); //输出 410
**decoct**
(PHP 3, PHP 4, PHP 5)
decoct — 十进制转换为八进制
说明
string decoct ( int number )
返回一字符串,包含有给定 number 参数的八进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 “37777777777”。
### 十进制转十六进制 dechex() 函数
1. echo dechex(10); //输出 a
2. echo dechex(47); //输出 2f
**dechex**
(PHP 3, PHP 4, PHP 5)
dechex — 十进制转换为十六进制
说明
string dechex ( int number )
返回一字符串,包含有给定 number 参数的十六进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 “ffffffff”。
## 二进制(binary system)转换函数说明
### 二进制转十制进 bindec() 函数
1. echo bindec(‘110011’); //输出 51
2. echo bindec(‘000110011’); //输出 51
3. echo bindec(‘111’); //输出 7
**bindec**
(PHP 3, PHP 4, PHP 5)
bindec — 二进制转换为十进制
说明
number bindec ( string binary_string )
返回 binary_string 参数所表示的二进制数的十进制等价值。
bindec() 将一个二进制数转换成 integer。可转换的最大的数为 31 位 1 或者说十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数值,这种情况下,它会返回 float 类型。
### 二进制转十六制进 bin2hex() 函数
1. $binary = “11111001”;
2. $hex = dechex(bindec($binary));
3. echo $hex;//输出f9
**bin2hex**
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
bin2hex — 将二进制数据转换成十六进制表示
说明
string bin2hex ( string str )
返回 ASCII 字符串,为参数 str 的十六进制表示。转换使用字节方式,高四位字节优先。
## 八进制(octal system)转换函数说明
### 八进制转十进制 octdec() 函数
1. echo octdec(’77’); //输出 63
2. echo octdec(decoct(45)); //输出 45
**octdec**
(PHP 3, PHP 4, PHP 5)
octdec — 八进制转换为十进制
说明
number octdec ( string octal_string )
返回 octal_string 参数所表示的八进制数的十进制等值。可转换的最大的数值为 17777777777 或十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
## 十六进制(hexadecimal)转换函数说明
### 十六进制转十进制 hexdec()函数
1. var_dump(hexdec(“See”));
2. var_dump(hexdec(“ee”));
3. // both print “int(238)”
4. var_dump(hexdec(“that”)); // print “int(10)”
5. var_dump(hexdec(“a0”)); // print “int(160)”
**hexdec**
(PHP 3, PHP 4, PHP 5)
hexdec — 十六进制转换为十进制
说明
number hexdec ( string hex_string )
返回与 hex_string 参数所表示的十六进制数等值的的十进制数。hexdec() 将一个十六进制字符串转换为十进制数。所能转换的最大数值为 7fffffff,即十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
hexdec() 将遇到的所有非十六进制字符替换成 0。这样,所有左边的零都被忽略,但右边的零会计入值中。
## 任意进制转换 base_convert() 函数
1. $hexadecimal = ‘A37334’;
2. echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100
**base_convert**
(PHP 3 >= 3.0.6, PHP 4, PHP 5)
base_convert — 在任意进制之间转换数字
说明
string base_convert ( string number, int frombase, int tobase )
返回一字符串,包含 number 以 tobase 进制的表示。number 本身的进制由 frombase 指定。frombase 和 tobase 都只能在 2 和 36 之间(包括 2 和 36)。高于十进制的数字用字母 a-z 表示,例如 a 表示 10,b 表示 11 以及 z 表示 35。
