W3docs

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 и незначащих нулей в начале.

Базовый пример

php— editable, runs on the server

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(), когда требуется конвертация туда и обратно между двумя системами счисления.

Практика

Практика
Что делает функция dechex() в PHP?
Что делает функция dechex() в PHP?
Was this page helpful?