dechex()
Функция dechex() в PHP преобразует десятичное число в шестнадцатеричное. Узнайте синтаксис, особенности и примеры.
Функция PHP dechex() преобразует десятичное (с основанием 10) целое число в его строковое шестнадцатеричное (с основанием 16) представление. Шестнадцатеричная система используется в CSS-цветах (#ff0000), адресах памяти, дампах байт и многих форматах файлов и сетевых протоколов, поэтому dechex() — главный инструмент всякий раз, когда нужно отобразить число в системе счисления с основанием 16.
В этой главе рассматриваются синтаксис функции, её поведение с отрицательными числами и числами с плавающей точкой, а также типичные сценарии использования в реальном коде.
Синтаксис
dechex(int $num): string$num— десятичное целое число для преобразования. Интерпретируется как 64-битное целое, поэтому максимальное точно представимое значение —PHP_INT_MAX(9223372036854775807).- Возвращаемое значение — строка в нижнем регистре шестнадцатеричного представления (цифры
0-9и буквыa-f). Результат не содержит префикса0xи незначащих нулей в начале.
Базовый пример
255 — наибольшее значение, умещающееся в одном байте, поэтому оно преобразуется в ff — две максимальные шестнадцатеричные цифры. Ещё несколько примеров помогут прояснить закономерность:
<?php
echo dechex(0); // 0
echo "\n";
echo dechex(10); // a
echo "\n";
echo dechex(16); // 10
echo "\n";
echo dechex(255); // ff
?>Обратите внимание, что dechex(16) возвращает "10" — это «один-ноль» в системе с основанием 16 (16 в десятичной), а не десятичное число десять.
Отрицательные числа и числа с плавающей точкой
dechex() работает только с целыми числами, однако не отвергает другой ввод — сначала приводит его к нужному типу, что может удивить:
- Числа с плавающей точкой усекаются до нуля перед преобразованием.
dechex(20.5)обрабатывается как20и возвращает14. - Отрицательные числа интерпретируются как беззнаковое дополнение до двух. На 64-битной сборке
dechex(-1)возвращаетffffffffffffffff(16 символовf), а не значение со знаком минус.
<?php
echo dechex(20.5); // 14 (the 20.5 is truncated to 20)
echo "\n";
echo dechex(-1); // ffffffffffffffff on 64-bit PHP
?>Если нужна шестнадцатеричная строка со знаком, обработайте знак самостоятельно: ($n < 0 ? '-' : '') . dechex(abs($n)).
Дополнение и форматирование вывода
Поскольку dechex() убирает ведущие нули, однозначный байт вроде 5 вернётся как "5", а не "05". Когда нужна фиксированная ширина — например, при построении CSS-цвета из RGB-компонентов — дополните результат:
<?php
$r = 5; $g = 200; $b = 16;
$color = sprintf('#%02s%02s%02s', dechex($r), dechex($g), dechex($b));
echo $color; // #05c810
?>Также можно форматировать шестнадцатеричное число напрямую через sprintf(), используя спецификатор %x (нижний регистр) или %X (верхний регистр) — это зачастую удобнее, когда нужно также добавить дополнение:
<?php
echo sprintf('%02X', 255); // FF
?>Обратная операция: hexdec()
Для обратного преобразования — из шестнадцатеричной строки в десятичное целое — используйте hexdec(). Эти две функции являются обратными друг другу:
<?php
echo hexdec(dechex(255)); // 255
?>Когда использовать dechex()
- Генерация или анализ CSS- и шестнадцатеричных цветовых кодов из числовых RGB-значений.
- Создание шестнадцатеричных дампов двоичных данных совместно с
bin2hex(). - Отображение значений битовых масок и флагов в компактном, читаемом виде.
- Логирование адресов памяти или смещений в том формате, который ожидают разработчики.
Для других систем счисления PHP предоставляет аналогичные функции: decbin() для двоичной и decoct() для восьмеричной, а bindec() и octdec() выполняют обратное преобразование.
Заключение
dechex() преобразует десятичное целое число в строку в нижнем регистре шестнадцатеричного представления без префикса 0x и без ведущих нулей. Помните об особенностях функции — числа с плавающей точкой усекаются, отрицательные числа становятся беззнаковыми — и используйте sprintf('%02x', ...), когда нужно дополнение. Применяйте dechex() совместно с hexdec(), когда требуется конвертация туда и обратно между двумя системами счисления.