§

Options

Режим
Группировка hex
Префикс 0x
Регистр
Кодировка текста
§

Ввод

§

Вывод

Специалисты процессинговых центров Сбербанка, занимаясь отладкой финансовых сообщений ISO 8583, ежедневно конвертируют hex-дампы платёжных фреймов в читаемый ASCII, чтобы разобрать поля MTI, DE55 и PAN и сверить их с журналами транзакций. Инженеры Газпром нефти, анализируя SCADA-трафик с промысловых контроллеров на месторождениях Западной Сибири, переводят Modbus RTU-кадры из шестнадцатеричного представления в текст для проверки регистров уставок и диагностики ошибок протокола. Авиатехники, работающие с бортовыми системами воздушных судов на российских маршрутах, декодируют ARINC-429 hex-слова прямо во вкладке браузера, не передавая бортовую телеметрию на внешние серверы, что важно при соблюдении внутренних регламентов информационной безопасности.

Как работает hex-кодирование

Каждый символ на странице хранится как один или несколько байтов. Hex-кодирование переписывает эти байты в шестнадцатеричном виде — два символа на байт, чтобы поток байтов был читаем без специальных инструментов.

  1. Кодирование текста в байты. Режим UTF-8 обрабатывает ввод через new TextEncoder().encode(text), возвращая Uint8Array байтовых значений. Режим Latin-1 берёт младшие восемь бит каждого кодового блока через charCodeAt(0) & 0xFF — именно это выполняют устаревшие кодеки ISO-8859-1.
  2. Представление каждого байта двумя hex-цифрами. Каждый байт отображается в две hex-цифры через byte.toString(16).padStart(2, "0"). Переключатель регистра выбирает верхний (A-F) или нижний (a-f) регистр для выходных символов.
  3. Применение группировки и префикса. Группировка вставляет разделитель между байтами: одиночный пробел, тире или пробел каждые четыре байта. Префикс 0x может добавляться один раз ко всей строке (без группировки) или к каждому байту (группировка пробелом), что соответствует соглашениям C-массивов и утилит для побайтового сравнения.
  4. Декодирование в обратном порядке. Режим Hex → Текст удаляет все пробелы, тире и префиксы 0x из ввода, проверяет оставшиеся символы по /^[0-9a-fA-F]+$/, отклоняет строки с нечётной длиной и восстанавливает Uint8Array из последовательных пар байтов. Режим UTF-8 декодирует массив через new TextDecoder("utf-8", { fatal: true }); режим Latin-1 отображает каждый байт в String.fromCharCode(b).
  5. Режим реального времени для быстрой работы. Режим реального времени включён по умолчанию. Каждое нажатие клавиши запускает отложенную повторную конвертацию с задержкой 150 мс, чтобы можно было вставлять, редактировать и наблюдать за обновлением второй панели без нажатия кнопки «Конвертировать».

Зачем использовать hex-конвертер

  • Отладка двоичных протоколов. Форматы Modbus, DNP3 и CoAP упаковывают заголовки в определённые байтовые смещения. Чтение захваченного фрейма в hex показывает каждое поле с первого взгляда, а обратное преобразование тех же байтов в ASCII выявляет любую текстовую полезную нагрузку внутри двоичного обрамления.
  • Работа с встроенными прошивками. Пробы JTAG и SWD выводят содержимое памяти в hex. Перевод области памяти в ASCII помогает обнаружить встроенные строки (пути к файлам, сообщения об ошибках, подписи вендоров), которые часто указывают, в каком месте прошивки вы находитесь.
  • Чтение захватов пакетов. Wireshark и tcpdump отображают каждый пакет в виде hex слева и ASCII справа. Конвертация фрагмента здесь позволяет скопировать hex-блок из отчёта об ошибке и прочитать, что на самом деле содержат байты, без повторного импорта в инструмент захвата.
  • Побайтовые сравнения. Сравнение двух двоичных файлов часто сводится к поиску изменившихся байтов. Конвертация обеих сторон в hex с единообразной группировкой выравнивает различие в текстовом редакторе, где встроенный инструмент сравнения может подсветить изменённые байты.

Типичные применения

Конвертация hex ↔ ASCII встречается в реверс-инжиниринге, безопасности и встроенных системах всякий раз, когда поток байтов содержит больше, чем просто текстовую полезную нагрузку.

  • Реверс-инжиниринг: возьмите hex-дамп из устойчивого к strings бинарного файла, выберите фрагменты, декодирующиеся как печатный ASCII, и используйте эти строки, чтобы сориентироваться в дизассемблере.
  • Сетевая криминалистика: скопируйте полезную нагрузку одного пакета из Wireshark в hex, вставьте сюда и читайте текст прикладного уровня без экспорта всего захвата.
  • Работа с криптоматериалом: ключ, IV или тег HMAC часто передаются в виде hex-строки. Декодирование обратно в байты подтверждает, что длина соответствует алгоритму (16 байт для AES-128, 32 для AES-256), прежде чем подставлять их в конфиг.

Разобранный пример

Выберите Текст → Hex, UTF-8, нижний регистр, группировку «Пробел каждый байт», префикс выключен. Введите Hi: в выводе будет 48 69. Включите префикс и переключите группировку в «Нет» — тот же ввод даст 0x4869. Вставьте эмодзи 😀 и режим UTF-8 выведет f0 9f 98 80 — четыре байта на одну кодовую точку. Переключитесь в Hex → Текст и вставьте 0x48-65-6C 6C 6F: парсер уберёт префикс, тире и пробелы и восстановит Hello.

FAQ

Что такое hex-кодирование?

Hex-кодирование (шестнадцатеричное кодирование) записывает поток байтов в шестнадцатеричной системе — два ASCII-символа на байт. Каждая hex-цифра покрывает четыре бита, поэтому две цифры — один восьмибитный байт. Алфавит: 0-9, затем A-F (или a-f); регистр — исключительно вопрос представления, декодеры принимают оба. Hex — стандартный способ записи сырых байтов в спецификациях протоколов, выводе отладчиков и ключах шифрования: он вдвое компактнее двоичного и избавляет от проблем непечатаемых символов.

Почему эмодзи занимает 4 байта в hex?

UTF-8 — кодировка переменной длины. Символы ASCII (U+0000–U+007F) занимают один байт, латинские дополнения — два, большинство других символов BMP — три, а символы выше U+FFFF, включая большинство эмодзи, — четыре. Улыбающееся лицо 😀 — это U+1F600 и кодируется в F0 9F 98 80. Для побайтового представления фиксированной ширины переключитесь на Latin-1, но Latin-1 охватывает только первые 256 кодовых точек.

Поддерживается ли Latin-1 / ISO-8859-1?

Да. Переключите параметр «Кодировка текста» на Latin-1 (ISO-8859-1). При кодировании берутся младшие восемь бит каждого кодового блока JavaScript (charCodeAt(0) & 0xFF), что соответствует устаревшему однобайтовому отображению. При декодировании для каждого байта применяется String.fromCharCode(byte). Используйте Latin-1 при работе с выводом старых систем Windows-1252 или систем до эпохи Unicode.

Конвертация выполняется в браузере?

Да. Конвертер использует TextEncoder, TextDecoder и небольшой парсер как единую статическую страницу. Нет загрузки на сервер, нет API-вызовов и нет аналитики того, что вы вставляете — только стандартные метрики загрузки страниц, общие для всего сайта. Те же hex-байты, что вы видите здесь, выдал бы Node-скрипт или Lambda-функция на том же вводе.

Конвертация hex ↔ ASCII — небольшая задача, которую каждый, кто читает двоичные протоколы или прошивки, выполняет по нескольку раз в день. Делать это во вкладке браузера, используя те же нативные кодировщики, что уже есть в Node и V8, позволяет работать быстро и держать поток байтов на своей машине.