Bin2hex: примеры (PHP)
bin2hex(string $string): stringФункция bin2hex в PHP
Функция bin2hex преобразует строку байтов (бинарные данные) в шестнадцатеричное представление. Каждый байт исходной строки заменяется на две шестнадцатеричные цифры, что удваивает длину результата.
Функция находит применение в различных задачах:
- Кодирование бинарных данных для безопасной передачи в текстовых протоколах (например, email, XML, JSON).
- Создание шестнадцатеричных дампов данных для отладки.
- Подготовка данных для криптографических операций или хеширования.
- Генерация шестнадцатеричных представлений для отображения пользователю.
string bin2hex ( string $string )
Функция принимает один обязательный аргумент:
- string — строка для преобразования. Если передается не строковый аргумент, он будет преобразован в строку.
Функция возвращает строку, содержащую шестнадцатеричное представление переданных данных. Символы в результатах представляются в нижнем регистре.
Простые примеры использования
echo bin2hex('Hello');48656c6c6f
$binary = "\x00\x01\x02\xFF";
echo bin2hex($binary);000102ff
echo bin2hex('Привет');d09fd180d0b8d0b2d0b5d182
echo bin2hex(12345);3132333435
Похожие функции в PHP
Функция выполняет обратное преобразование — декодирует шестнадцатеричную строку в бинарные данные. Используют пару с bin2hex.
Кодируют данные в формат Base64. Этот метод обеспечивает более эффективное использование пространства (увеличивает данные примерно на 33% против 100% у bin2hex) и лучше подходит для передачи бинарных данных в текстовых средах.
Функция распаковывает бинарные данные в массив согласно заданному формату. Может использоваться для сложных преобразований между бинарными и другими форматами.
Позволяют форматировать шестнадцатеричный вывод для отдельных чисел, но не для произвольных строк байтов.
Функцию bin2hex предпочтительнее использовать, когда требуется точное шестнадцатеричное представление каждого байта. Base64 больше подходит для кодирования с целью передачи, поскольку создает более компактный вывод. Для обратного преобразования всегда используют соответствующую функцию (hex2bin или base64_decode).
Аналоги в других языках
Bin2hex в Python
Метод bytes.hex() или функция binascii.hexlify().
data = b'Hello'
print(data.hex())
# Или
import binascii
print(binascii.hexlify(data).decode())48656c6c6f 48656c6c6f
Bin2hex в Javascript
Метод Buffer.from().toString('hex') в Node.js или ручное преобразование в браузере.
// Node.js
const buf = Buffer.from('Hello');
console.log(buf.toString('hex'));
// Браузер
function toHex(str) {
return Array.from(str).map(c =>
c.charCodeAt(0).toString(16).padStart(2, '0')).join('');
}
console.log(toHex('Hello'));48656c6c6f 48656c6c6f
Bin2hex в MySQL
Функции HEX() и UNHEX().
SELECT HEX('Hello');48656C6C6F
В отличие от PHP, в Python и JavaScript обычно работают с объектами типа bytes или Buffer. MySQL возвращает результат в верхнем регистре. PHP функция работает со строками, рассматривая их как последовательности байтов, что важно учитывать при работе с многобайтовыми кодировками.
Типичные ошибки
Функция работает с байтами, а не символами. Для строк в UTF-8 один символ может занимать несколько байтов.
$char = '€';
echo bin2hex($char); // Кодировка UTF-8e282ac
Неправильный способ обратного преобразования.
$hex = bin2hex('test');
$back = pack('H*', $hex); // Работает, но лучше использовать hex2bin
echo $back;test
Функция всегда возвращает строчные буквы, что иногда не соответствует ожиданиям.
echo bin2hex('ABC');414243
Хотя функция преобразует аргумент в строку, это может привести к неочевидным результатам.
echo bin2hex(true);
echo bin2hex(null);31
Изменения в последних версиях PHP
Тип возвращаемого значения теперь точно указан как string. Ранее в документации указывался тип string, но теперь это закреплено в объявлении функции.
Были улучшения внутренней обработки ошибок, но публичный API функции не изменялся.
Была добавлена обратная функция hex2bin для декодирования шестнадцатеричных строк.
Функция bin2hex остается стабильной многие годы, что свидетельствует о ее надежности и завершенности реализации.
Расширенные примеры применения
function hexDump($filePath, $bytesPerLine = 16) {
$handle = fopen($filePath, 'rb');
$offset = 0;
while (!feof($handle)) {
$chunk = fread($handle, $bytesPerLine);
if ($chunk === '') break;
$hex = bin2hex($chunk);
$hex = chunk_split($hex, 2, ' ');
printf('%08x: %-'.($bytesPerLine*3).'s\n',
$offset, $hex);
$offset += $bytesPerLine;
}
fclose($handle);
}
hexDump(__FILE__, 8);00000000: 3c3f 7068 7020 0a 00000008: 6675 6e63 7469 6f6e ...
function compareBinIgnoreCase($bin1, $bin2) {
return strcasecmp(bin2hex($bin1), bin2hex($bin2));
}
$result = compareBinIgnoreCase("Hello", "HELLO");
echo $result === 0 ? 'Совпадают' : 'Различаются';Различаются
function binaryToUid($binaryData) {
$hex = bin2hex($binaryData);
return implode('-', str_split($hex, 8));
}
$data = random_bytes(16);
echo binaryToUid($data);a1b2c3d4-e5f67890-1234abcd-ef567890
function hexWithSeparator($data, $separator = ':') {
$hex = bin2hex($data);
return implode($separator, str_split($hex, 2));
}
echo hexWithSeparator('Hello');48:65:6c:6c:6f
function byteFrequency($data) {
$hex = bin2hex($data);
$bytes = str_split($hex, 2);
return array_count_values($bytes);
}
$freq = byteFrequency('abracadabra');
arsort($freq);
print_r($freq);Array
(
[61] => 5
[62] => 2
[72] => 2
[63] => 1
[64] => 1
)