Как перевести HEX в BIN файл: полное руководство

Прошивка микроконтроллера отклоняется программатором с ошибкой неверного формата — типичный признак того, что на руках текстовый HEX-файл, а устройство ждёт чистый бинарный образ. Перевести hex в bin файл можно несколькими способами: через онлайн-конвертер, hex-редактор, скрипт на Python или штатные утилиты вроде srec_cat. Выбор метода зависит от того, что именно скрывается за расширением .hex — текстовый формат Intel HEX или просто шестнадцатеричное представление байтов.

Прежде чем приступать к конвертации, важно понять принципиальную разницу. Файл BIN — это последовательность байтов «как есть», готовая к прямой записи в память. Файл HEX чаще всего представляет собой текст, где данные описаны в шестнадцатеричном виде с адресами и контрольными суммами. Поэтому простая смена расширения ничего не даст: содержимое нужно именно преобразовать.

Чем отличаются форматы HEX и BIN

Текстовый формат Intel HEX состоит из строк-записей. Каждая строка начинается с двоеточия, затем следуют длина данных, адрес, тип записи, сами данные и контрольная сумма. Такой формат удобен для передачи прошивок, потому что ошибку в строке легко обнаружить по контрольной сумме.

Бинарный файл не содержит ни адресов, ни служебной информации — только сами байты подряд. Именно поэтому размер BIN-файла после конвертации обычно заметно меньше исходного HEX: текстовое представление каждого байта занимает минимум два символа плюс служебные поля.

Бывает и второй сценарий: файл с расширением .hex содержит просто шестнадцатеричные значения в виде текста, без структуры Intel HEX. Такое встречается при экспорте данных из логических анализаторов или отладчиков. Способ конвертации в этом случае будет другим — об этом ниже.

Как определить тип вашего HEX-файла

Откройте файл в любом текстовом редакторе, например в Notepad++ или стандартном «Блокноте». Если каждая строка начинается с двоеточия и выглядит примерно как :10000000214601360121470136007EFE09D2190140 — перед вами классический Intel HEX. Для него подходят специализированные конвертеры и утилиты.

Если же содержимое выглядит как сплошной набор шестнадцатеричных пар, разделённых пробелами или переносами строк (48 65 6C 6C 6F), — это простое hex-представление байтов. С ним работают hex-редакторы и скрипты.

  • 🔍 Строки начинаются с : — формат Intel HEX, нужен конвертер с поддержкой этого стандарта.
  • 📄 Сплошные hex-пары без структуры — подойдёт hex-редактор или скрипт.
  • 📦 Строки вида S1, S2, S3 в начале — это формат Motorola S-Record, конвертируется утилитой srec_cat.
  • ❓ Файл не открывается как текст — возможно, это уже бинарный файл с неверным расширением.
📊 Какой тип HEX-файла вам нужно конвертировать?
Intel HEX (строки с двоеточием)
Просто hex-текст
Motorola S-Record
Не знаю, нужна помощь с определением

Способ 1: онлайн-конвертеры

Самый быстрый путь для разовой задачи — загрузить файл в онлайн-конвертер. Сервисы с поддержкой Intel HEX принимают текстовый файл и отдают готовый .bin для скачивания. Никакой установки программ не требуется, достаточно браузера.

Порядок действий прост: открываете сервис, выбираете исходный файл, указываете направление конвертации «hex to bin» и скачиваете результат. Некоторые конвертеры позволяют задать байт-заполнитель (обычно 0xFF) для пропусков между блоками данных — эта опция важна для прошивок с «дырами» в адресном пространстве.

⚠️ Внимание: не загружайте в публичные онлайн-сервисы прошивки, содержащие коммерческую тайну, ключи шифрования или персональные данные. Файл передаётся на чужой сервер, и вы не контролируете его дальнейшую судьбу. Для чувствительных данных используйте только локальные инструменты.

Способ 2: hex-редакторы

Hex-редакторы вроде HxD или 010 Editor позволяют вручную преобразовать шестнадцатеричный текст в бинарные данные. Метод подходит для файлов с простым hex-представлением байтов без структуры Intel HEX.

В HxD последовательность такая: создайте новый файл, скопируйте hex-строку из исходного документа и вставьте её через функцию вставки с интерпретацией как hex-значений. Затем сохраните результат с расширением .bin. Редактор запишет каждую пару символов как один байт.

Этот способ даёт полный визуальный контроль над результатом: вы видите итоговые байты и можете сразу проверить сигнатуры, заголовки и контрольные участки прошивки. Минус — при больших объёмах ручная вставка неудобна.

☑️ Проверка перед конвертацией

Выполнено: 0 / 5

Способ 3: конвертация через Python

Для автоматизации и работы с большими файлами удобнее скрипт. Небольшой фрагмент на Python преобразует простой hex-текст в бинарный файл буквально в несколько строк:

with open("input.hex") as f:

hex_data = f.read().replace(" ", "").replace("\n", "")

with open("output.bin", "wb") as f:

f.write(bytes.fromhex(hex_data))

Для формата Intel HEX потребуется разбор записей с учётом адресов и контрольных сумм. Существуют готовые библиотеки, например intelhex, которая устанавливается через пакетный менеджер и выполняет конвертацию одной командой из терминала. Это надёжнее ручного разбора, потому что библиотека проверяет контрольные суммы каждой строки.

Пример работы с библиотекой intelhex

После установки библиотеки (pip install intelhex) конвертация выполняется командой: python -m intelhex input.hex output.bin. Библиотека автоматически обрабатывает расширенные адресные записи и заполняет пропуски байтом 0xFF, если не указано иное.

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

Способ 4: утилиты командной строки

Разработчики встраиваемых систем часто используют пакет SRecord и его утилиту srec_cat. Она понимает десятки форматов прошивок, включая Intel HEX и Motorola S-Record, и выводит чистый бинарник:

srec_cat input.hex -Intel -o output.bin -Binary

Утилита позволяет дополнительно обрезать образ по адресному диапазону, менять байт-заполнитель и объединять несколько файлов. Для Windows доступны сборки SRecord, в Linux пакет обычно ставится из репозиториев. Ещё один вариант — objcopy из набора binutils, если он установлен вместе с тулчейном для кросс-компиляции.

Сравнение способов конвертации

СпособПоддержка Intel HEXСкоростьПодходит для
Онлайн-конвертерДа, у большинства сервисовБыстро для мелких файловРазовые задачи
Hex-редактор (HxD)Нет, только простой hexМедленно, вручнуюМалые объёмы, визуальный контроль
Python-скриптС библиотекой intelhexБыстроАвтоматизация, большие файлы
srec_catДа, плюс S-Record и другиеОчень быстроПрофессиональная разработка

Для разовой конвертации небольшой прошивки проще всего воспользоваться онлайн-сервисом. Если задача повторяется или файл содержит чувствительные данные, ставьте локальный инструмент — srec_cat или библиотеку для Python.

Типичные ошибки и их решение

Частая проблема — программатор отвергает полученный BIN-файл. Возможная причина: в исходном HEX были пропуски адресов, а конвертер заполнил их нулями вместо 0xFF. Для флеш-памяти стёртое состояние — это единицы, поэтому заполнитель имеет значение. Проверьте настройки конвертера или задайте байт-заполнитель явно.

⚠️ Внимание: нельзя конвертировать HEX в BIN простым переименованием расширения. Текстовый файл останется текстом, и устройство либо откажется его принимать, либо запишет в память ASCII-коды символов вместо реальных данных — прошивка будет испорчена.

Вторая типичная ситуация — ошибка контрольной суммы при конвертации Intel HEX. Она означает, что исходный файл повреждён при скачивании или передаче. Решение одно: получить файл заново из надёжного источника, а не пытаться «исправить» его вручную.

  • 🚫 Ошибка checksum — файл повреждён, скачайте его повторно.
  • 📏 Размер BIN равен размеру HEX — конвертация не выполнилась, проверьте формат входного файла.
  • 🧭 Устройство не стартует после прошивки — проверьте начальный адрес и байт-заполнитель.
  • 🔁 Конвертер выдаёт пустой файл — вероятно, входной формат распознан неверно.

Часто задаваемые вопросы

Можно ли перевести HEX в BIN без установки программ?

Да, для этого существуют онлайн-конвертеры, работающие в браузере. Загружаете файл, получаете готовый .bin. Учитывайте только ограничение по конфиденциальности: чувствительные прошивки лучше обрабатывать локальными инструментами.

Почему BIN-файл получился больше, чем ожидалось?

Вероятная причина — пропуски в адресном пространстве исходного HEX. Конвертер заполняет «дыры» байтом-заполнителем от минимального до максимального адреса, и итоговый файл может занимать весь диапазон памяти контроллера. Это нормальное поведение, но при необходимости образ можно обрезать по диапазону, например через srec_cat.

Чем открыть BIN-файл после конвертации для проверки?

Любым hex-редактором: HxD, 010 Editor или аналогом. Вы увидите байты в шестнадцатеричном виде и сможете сверить начало образа с ожидаемым содержимым — например, с таблицей векторов прерываний для прошивок микроконтроллеров.

Что делать, если файл имеет расширение .hex, но внутри не текст?

Откройте его в hex-редакторе. Если в начале видны нечитаемые байты вместо ASCII-символов, перед вами уже бинарный файл с неверным расширением. Достаточно переименовать его в .bin — конвертация не требуется.

Подойдёт ли полученный BIN для прошивки через программатор?

Зависит от программатора и его ПО: одни принимают оба формата, другие требуют строго BIN или строго HEX. Сверьтесь с документацией на ваше оборудование. Если программатор принимает Intel HEX напрямую, конвертация может вообще не понадобиться.