bin2hex()
Функция bin2hex() преобразует строку байтов в шестнадцатеричное представление. Узнайте синтаксис, примеры и отличия от dechex().
Функция PHP bin2hex() преобразует строку необработанных байтов в её шестнадцатеричное представление. Каждый байт (8 бит) становится ровно двумя шестнадцатеричными цифрами, поэтому возвращаемая строка всегда вдвое длиннее входной. Несмотря на название, входным значением является любая бинарно-безопасная строка, а не строка из символов "0"/"1" — именно поэтому bin2hex() является стандартным способом преобразования произвольных бинарных данных (байты изображений, ключи шифрования, хэши) в безопасный, печатаемый ASCII-формат.
На этой странице рассматриваются синтаксис, рабочий пример, отличия от связанных функций и типичные подводные камни.
Синтаксис
bin2hex(string $string): stringФункция принимает один параметр, $string — бинарные данные для кодирования — и возвращает строку строчных шестнадцатеричных символов (0-9, a-f). Функция доступна начиная с PHP 4.0.5 и никогда не возвращает false.
Базовый пример
Здесь текст "Hello, World!" передаётся в bin2hex(), которая кодирует байтовое значение каждого символа в виде двух шестнадцатеричных цифр. Результат:
48656c6c6f2c20576f726c6421Например, первый символ H имеет байтовое значение 0x48, e — 0x65 и так далее; конкатенация этих пар даёт результат, показанный выше.
Зачем использовать bin2hex()
Наиболее распространённая причина — сделать бинарные данные безопасными для вывода, логирования, хранения в текстовом столбце или передачи в URL. Необработанные байты могут содержать непечатаемые или управляющие символы; их шестнадцатеричная форма является чистым ASCII.
<?php
// Generate 8 random bytes and show them as a hex token.
$bytes = random_bytes(8);
echo bin2hex($bytes); // e.g. "9f3a1c84e2b07d56" (16 hex chars)
?>Получается 16-символьный токен, поскольку 8 байтов соответствуют 16 шестнадцатеричным цифрам.
Обратное преобразование
Используйте hex2bin(), чтобы преобразовать шестнадцатеричную строку обратно в исходные байты. Эти две функции являются точными инверсиями для любых допустимых входных данных:
<?php
$original = "PHP";
$hex = bin2hex($original); // "504850"
$restored = hex2bin($hex); // "PHP"
var_dump($original === $restored); // bool(true)
?>bin2hex() и dechex()
Эти функции легко перепутать:
bin2hex()работает со строкой байтов и кодирует каждый байт в виде двух шестнадцатеричных цифр.dechex()работает с одним целым числом и возвращает его шестнадцатеричную форму без дополнения нулями.
<?php
echo bin2hex("A"); // "41" (the byte 0x41)
echo "\n";
echo dechex(65); // "41" (the integer 65)
echo "\n";
echo dechex(10); // "a" (no leading zero)
?>Подводные камни
- Только строчные буквы.
bin2hex()всегда возвращает строчные буквы. Если нужны прописные, применитеstrtoupper()к результату. - Длина удваивается. Длина результата всегда равна
2 * strlen($input); пустая строка возвращает пустую строку. - Это не шифрование. Шестнадцатеричное кодирование полностью обратимо и не обеспечивает никакой защиты — оно лишь меняет представление данных. Для хэширования используйте
md5()илиsha1(), которые уже возвращают шестнадцатеричные строки.
Связанные функции
hex2bin()— обратная операция.dechex()— преобразование целого числа в шестнадцатеричный формат.ord()— получение байтового значения одного символа.strlen()— определение длины строки в байтах.