PHP 8.x 进制转换指南:二进制、八进制、十进制与十六进制

在 PHP 8.x 中,“换进制”首先是一个数据契约问题:输入是受平台位宽限制的整数,还是需要保留前导零的数字字符串?输出要参与计算,还是仅用于显示?先回答这些问题,才能避免把无效字符、浮点近似值或字节编码误当成正确的整数转换。

本文只使用无敏感信息的示例。所有来自请求、文件或数据库的字符串都应先按应用约定完整验证,再交给转换函数。

先看结论

  • 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;
}

这个验证器会接受 00011000FF,但拒绝 0b10100x2f、空白、负号以及超出进制的数字。PHP 源码里的 0b0o0x 是整数字面量语法;不能由此推断任意输入字符串也应接受这些前缀。

若十进制输入来自 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_SIZEPHP_INT_MINPHP_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() 可能正是所需工具;处理由 01 组成的数字文本时,则应先验证后做进制转换。

超出本机位宽:使用明确的任意长度方案

当值可能超过 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;

测试覆盖的是本机整数路径,并不证明超范围输入对 floatbase_convert() 仍然精确。生产代码还应对实际允许的最小值、最大值、长度和输出宽度增加边界用例。

发布前检查清单

  • 明确输入是本机整数、数字字符串还是任意长度整数。
  • 为每个字段固定允许的进制、符号、前缀、大小写、长度和前导零规则。
  • 转换前验证整个字符串;不要依赖无效字符被忽略。
  • bindec()octdec()hexdec() 的结果检查 is_int()
  • 不把超范围值经过 float,不把 base_convert() 用于需要任意长度精确性的值。
  • 把数值、数字字符串与显示前缀/填充分别保存。
  • 对负数明确选择“带符号文本”还是“固定位宽位模式”,并记录位宽。
  • 在目标 PHP 版本和 32/64 位部署环境上运行边界测试。
  • 在 HTML 模板边界编码输出,日志中不记录未经处理的原始输入。

官方资料

历史原文存档(仅供溯源)

以下内容逐字保留自 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。

Leave a Reply