Как преобразовать бинарный файл в текстовый linux

Обновлено: 07.07.2024

В программировании часто встречается задача преобразовать содержимое какого-нибудь файла в содержимого массива констант. Например, у Вас есть графика картинки в виде файла BMP, и для его вывода на индикатор нужно получить массив примерно такого вида:

Задача вроде бы простая, но самому писать утилиту конвертации не хочется. Какие есть готовые программы, которые позволяют получить текстовый дамп двоичного файла?

1. bmptoc.exe.
2. bin2C компании Segger.
3. hextools.
4. xxd Linux.

Примечание: все описываемые утилиты можно скачать в архиве по ссылке [1].

Обратное преобразование - из HEX-дампа в двоичный файл - позволяют делать утилиты hextools и xxd.

[bmptoc.exe]

Это простая утилита с открытым исходным кодом. Она предназначена для вывода HEX-дампа растра монохромных файлов BMP, вырезая заголовок (что удобно для создания знакогенераторов), и также может выводить HEX-дамп всего файла целиком (опция -noheader). При запуске без опций утилита выведет экран подсказки.

Если имя входного файла опущено, то HEX-дамп будет выведен в окно консоли. Опция -raw оставляет в HEX-дампе завершающие нулевые байты выравнивания файла BMP (эти байты не несут никакой полезной информации, они нужны только для подгонки размера файла формата BMP под кратность 4 байтам). Опция -noheader отключает анализ заголовка файла BMP, при этом в HEX-дамп попадут все байты вместе с заголовком (эта опция позволяет конвертировать в HEX-дамп любые файлы, не только файлы BMP). Опция -i инвертирует монохромную графику при выводе в HEX-дамп.

[bin2C]

Эта утилита удобна тем, что позволяет сразу получить и модуль на языке C, и заголовок к нему. В модуле будет сформирован обычный массив из данных входного файла. При запуске без опций утилита выведет экран подсказки.

Для конвертации нужно обязательно указать и имя входного, и имя выходного файла (без расширения). Пример:

Bin2C.exe 256x64-greyscale-4bit.bmp 256x64-greyscale-4bit

В результате будет сформировано 2 файла - файл модуля с именем выходного файла и расширением *.c, и файл заголовка с расширением *.h. Имя для массива будет автоматически сгенерировано из имени входного файла.

[hextools]

В пакет утилит hextools (они с открытым исходным кодом) входят 2 программы: hexdump.exe и hex2bin.exe. Первая позволяет получить HEX-дамп файла, а вторая позволяет получить обратное преобразование.

[xxd]

Эта утилита пришла из мира xNix (см. man xxd). Есть порт на Windows [1]. Подсказку по опциям можно получить командой xxd -h.

Пример командной строки для получения HEX-дампа (в результате получится текстовый файл 256x64-greyscale-4bit.txt):

xxd 256x64-greyscale-4bit.bmp >256x64-greyscale-4bit.txt

Пример командной строки для обратного преобразования (из HEX-дампа будет получен двоичный файл):

HEX-редактор - это приложение, с помощью которого можно просмотреть и отредактировать файл, содержащий двоичные данные (записанные при помощи комбинаций из цифр 0 и 1), перекодировав его в 16-ричный формат.

А поскольку все без исключения файлы хранятся в памяти компьютера именно в таком виде, использование программ, позволяющих работу с HEX, открывает широкие возможности для различных манипуляций с данными (например, для восстановления поврежденных текстовых и графических документов). Некоторые HEX редакторы предназначены для анализа и редактирования данных с HDD и съемных накопителей — их называют редакторами дисков или редакторами секторов.

Рабочее окно стандартного HEX-редактора разделено на три области. Справа расположена так называемая область символов, в центральной части — область 16-ричного кода и слева — область адресов. В наше время пользователям Linux доступно множество таких программ — каждый может выбрать ту, которая окажется максимально полезной в конкретной ситуации. В этой статье мы собрали лучшие hex редакторы linux.

Лучшие HEX редакторы для Linux

Порой информация, которая хранится на каких-либо носителях, повреждается из-за ошибок в работе системы. В таком случае нет смысла изобретать велосипед и придумывать специальную программу для извлечения данных. Гораздо эффективнее будет использование HEX-редактора. Мы отобрали 20 лучших программ и подготовили их обзор.

1. Vim


Vim служит для редактирования текстовых файлов в шестнадцатеричной системе. В работе он задействует внешний инструмент «xxd», который входит в базовый набор некоторых дистрибутивов Linux. Такое «сотрудничество» иногда становится причиной ошибок в работе редактора.

Преобразование файлов происходит после применения команд:

  • :%! xxd — для конвертирования файла в 16-ричный формат;
  • %! xxd -r — для возвращения к исходному варианту.

2. Hexedit Hex Editor

Hexedit — простой и надежный HEX editor linux. Среди прочих выделяется наличием большого количества опций (быстрый поиск и/или сравнение, подсветка символов, EBCDIC, применение цветовых схем, режимы INS/OVR, закладки. отслеживание изменений.

  • Hexedit используется в работе таких функций ПК как макросы, нажатия клавиш, фоновый поиск, редактор дисков и другие.
  • Настройка подсказок, калькулятор, шаблоны. Поддержка файлов, размер которых превышает 4 Гб.
  • Наличие инструментов Auto-hide tool windows (для быстрого скрытия окон) и Docking tool windows (для закрепления окон).
  • По команде пользователя Hexedit может получать доступ к памяти компьютера, всем дискам и файлам.

3. Ghex – GNOME Hex Editor


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

  • Многошаговые команды Undo (отмена) и Redo (повтор).
  • Поиск функций в файлах и их замена.
  • Отслеживание взаимодействий между восьмеричным, двоичным, шестнадцатеричным и десятичным кодами.
  • Настраиваемый MDI.

4. Bless Hex editor


Bless — редактор с открытым исходным кодом, быстрый в работе и простой в настройке. Его интерфейс собран на GTK. Обеспечивает удобную работу с большими файлами, позволяет отменять и повторять действия.

  • Управление при помощи клавиатуры.
  • Функция поиска и замены файлов.
  • Возможность копировать и вставлять текст.
  • Блокировка устройств и редактирование большого количества файлов.

5. Okteta Editor


Изначально это приложение было разработано для программистов, однако, пригодится и обычным пользователям, у которых возникла потребность работать с файлами на уровне байтов и редактировать hex linux.

6. wxHexEditor


Мощный инструмент, поддерживающий различные типы файлов, аксессуары и тэги, размер которых может исчисляться в Эксабайтах (1 Эб = 10 18 байт). В большей степени его использование имеет смысл для программистов.

7. HexCurse


Написан на языке C на основе ncurses. Нравится пользователям из-за наличия большого числа функций. Среди прочего, он позволяет изменять сочетания клавиш, использующиеся для управления программой.

8. Hexer


Бесплатный HEX редактор Linux, который умеет только загружать весь файл целиком, что не позволяет редактировать отдельные блоки. Впрочем, есть у него и преимущества — например, функция редактирования в командной строке, многоуровневая команда отмены (Undo) и множественные буферы.

9. Dhex Hex Editor


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

10. Jeex Hex Editor


Jeex может похвастаться открытым исходным кодом, который был написан на языке Gtk + и опубликован под публичной лицензией GNU. Позволяет выполнять операции в двоичном, восьмеричном, десятичном и шестнадцатеричном форматах. На данный момент является одним из лучших HEX-редакторов.

11. Binary Ninja

Платная программа, написанная на Python и опубликованная под лицензией GPLv2. Особенность этой программы - она рассчитана в первую очередь на реверс-инжиниринг. Все желающие могут скачать демо-версию и в течение 25 минут протестировать Binary Ninja с урезанным количеством опций.

Особенности программы:

  • Графики с синопсисами, позволяющими просмотреть и проанализировать информацию о заданной в данный момент функции.
  • Благодаря подменю, выбранные плагины можно объединять в отдельные группы.
  • Улучшенная работа PE-анализатора и PE-парсера.
  • Доступ к логам осуществляется посредством нажатия на строку с адресом.
  • Binary Ninja помогает найти нужную библиотеку для выполнения той или иной бинарной функции.

12. Fileobj Hex Editor

Fileobj был написан на python и основывается на ncurses. Интерфейс этого HEX-редактора напоминает Vi, соответственно, у этих программ много одинаковых функций. Кроме того, Fileobj умеет выполнять большинство команд Vi, что удобно для пользователей.

13. Joe Hex Editor


Джо — еще один HEX-редактор на ncurses, доступный пользователям Linux. Имеет пользовательский mode-less интерфейс, который весьма прост в использовании. Доступ к справочным материалам предоставляется через специальную кнопку на экране.

  • Для упрощения работы можно использовать комбинации клавиш.
  • Настройка конфигураций.
  • Поддержка всех популярных форматов файлов.

14. VBdiff Hex Editor

Название этой программы — VBdiff — буквально обозначает «Визуально двоичный diff». Этот бесплатный редактор способен открывать два файла одновременно и может их сравнивать. Умеет работать с большими документами.

15. HexCmp

HexCmp входит в состав программного обеспечения Fairdell. Это удобное приложение для сравнения и редактирования двоичных файлов как в двоичном, так и в 16-ричном форматах.

Выводы

Упомянутые выше HEX редакторы Linux, достаточно часто используются владельцами компьютеров, работающих под этой операционной системой. Некоторые из них более популярны среди специалистов — программистов и разработчиков. Другие приходятся по вкусу тем, кто пользуется подобным ПО лишь от случая к случаю. Тем не менее, можно сказать, что все они достаточно гибкие и функциональные для того, чтобы удовлетворить потребности всех пользователей.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Философия Linux гласит - всё в системе есть файл. Мы ежедневно работаем с файлами, и программы, которые мы выполняем, - тоже файлы. В разных случаях нам может понадобиться создать в системе файлы определённого типа. Если вам интересно, какие типы файлов в Linux можно создать, смотрите отдельную статью.

Конечно, всё очень просто делается с помощью мышки и файлового менеджера. Но если вы дружите с клавиатурой, создать файл через терминал Linux намного быстрее и, как вы увидите, эффективнее. В терминале вы можете не только создавать пустые файлы, но и создавать файл с уже готовым содержимым, файлы определённого размера, и с нужными метаданными.

Как всё это делать, вы узнаете из этой статьи. Мы рассмотрим все доступные средства создания файлов в терминале Linux. Поехали!

1. Редактор nano

Самый распространённый способ создать текстовый файл в Linux - это использовать консольные текстовые редакторы. Например nano. После ввода команды открывается редактор, и вы прописываете нужный текст, например:

files

2. Редактор Vi

Тот же принцип, но программа намного серьёзнее:

files1

Если вы в первый раз столкнулись с vim, то предупрежу - это необычный редактор. Здесь есть два режима: режим вставки и командный. Переключаться между ними можно с помощью кнопки Esc. Для выхода из редактора в командном режиме наберите :q, для сохранения файла - :w. Вообще, Vim - очень полезный инструмент. Чтобы узнать побольше о его возможностях и выучить основы, выполните: vimtutor.

Понятное дело, в этом пункте можно говорить и о других редакторах, в том числе и с графическим интерфейсом. Но мы их опустим и перейдём к другим командам создания файла в Linux.

3. Оператор перенаправления >

Это, наверное, самая короткая команда для создания файла в Linux:

files2

Оператор оболочки для перенаправления вывода позволяет записать вывод любой команды в новый файл. Например, можно подсчитать md5 сумму и создать текстовый файл в Linux с результатом выполнения.

files3

Это рождает ещё несколько способов создания файла в Linux, например, выведем строку в файл с помощью команды echo:

echo "Это строка" > файл.txt

files4

Этот способ часто используется для создания конфигурационных файлов в Linux, так сказать, на лету. Но заметьте, что sudo здесь работать не будет. С правами суперпользователя выполниться echo, а запись файла уже будет выполнять оболочка с правами пользователя, и вы всё равно получите ошибку Access Denied.

Ещё тем же способом можно сделать примитивный текстовый редактор для создания файла. Утилита cat без параметров принимает стандартный ввод, используем это:

files5

После выполнения команды можете вводить любые символы, которые нужно записать в файл, для сохранения нажмите Ctrl+D.

А ещё есть утилита printf, и здесь она тоже поддерживает форматирование вывода:

printf "Это %d текстовая строка\n" 1 > файл

files6

Этот способ создать файл в Linux используется довольно часто.

4. Оператор перенаправления вывода >>

Также можно не только перезаписывать файл, а дописывать в него данные, с помощью перенаправления оператора >>. Если файла не существует, будет создан новый, а если существует, то строка запишется в конец.

echo "Это текстовая строка" > файл.txt
$ echo "Это вторая текстовая строка" >> файл.txt

files7

5. Оператор перенаправления 2>

file11

Если команда не выдает ошибок, файл будет пустым.

6. Оператор перенаправления и head

С помощью команды head можно выбрать определённый объем данных, чтобы создать текстовый файл большого размера. Данные можно брать, например, с /dev/urandom. Для примера создадим файл размером 100 мегабайт:

base64 /dev/urandom | head -c 100M > файл

7. Команда cp

Команда cp используется для копирования файлов в Linux. Но с её помощью можно и создать файл. Например, чтобы создать пустой файл, можно просто скопировать /dev/null:

cp /dev/null файл

8. touch

Вот мы и подобрались к непосредственному созданию файлов через терминал, для этого в Linux есть специальная утилита touch. Она позволяет создать пустой файл в Linux, при этом указывать дату создания, права доступа и другие метаданные.

Чтобы создать пустой файл Linux, просто наберите:

files8

Можно создать несколько пустых файлов сразу:

touch файл1 файл2

Опция -t позволяет установить дату создания. Дата указывается опцией -t в формате YYMMDDHHMM.SS. Если не указать, будет установлена текущая дата. Пример:

touch -t 201601081830.14 файл

Можно использовать дату создания другого файла:

touch -r шаблон файл

Также можно установить дату последней модификации, с помощью опции -m:

touch -m -t 201601081830.14 файл

Или дату последнего доступа:

touch -a -t 201601081830.14 файл

Чтобы посмотреть, действительно ли задаётся информация, которую вы указали, используйте команду stat:

files9

9. Утилита dd

Это утилита для копирования данных из одного файла в другой. Иногда необходимо создать файл определённого размера в Linux, тогда можно просто создать его на основе /dev/zero или /dev/random, вот так:

dd if=/dev/zero of=

files10

Параметр if указывает, откуда брать данные, а of - куда записывать, count - необходимый размер. Ещё можно указать размер блока для записи с помощью bs, чем больше размер блока, тем быстрее будет выполняться копирование.

Создание специальных файлов в Linux

В Linux, кроме выше рассмотренных обычных текстовых и бинарных файлов, существуют ещё и специальные файлы. Это файлы сокетов и туннелей. Их нельзя создать обычными программами, но для этого существуют специальные утилиты, смотрите подробнее в статье, ссылку на которую я дал вверху.

Выводы

Это были все возможные команды для создания файла в Linux. Если вы знаете другие, которые следовало бы добавить в статью - поделитесь в комментариях.

У меня есть txt файл с номерами вроде 541399.531 261032.266 16.660 (первая строка) 541400.288 261032.284 16.642 (2-я строка). сто пунктов. Я хочу преобразовать этот файл в двоичный формат. Кто-нибудь может мне помочь?

В С++ просто откройте файл для чтения, а затем скопируйте его в другой файл в виде двоичного файла.

Я предлагаю избегать записи двоичных представлений в файл на несколько сотен или тысяч точек. Это называется микро-оптимизацией, а время разработки перевешивает любой выигрыш в производительности исполняемого файла.

Не стоит сохранять для размера

В современных вычислениях большинство платформ поддерживают огромные (гигабайтные) размеры файлов, а компьютеры имеют мегабайты или гигабайты памяти для используемых программ. Поэтому запись в двоичном формате для экономии места (размер файла или размер памяти) не дает каких-либо существенных преимуществ по сравнению с другими узкими местами в цикле разработки.

Не очень выигрыш в производительности.

Идея о том, что загрузка двоичного представления из файла более эффективна, чем перевод текстового представления, верна. Тем не менее, большинство процессоров могут переводить ASCII-перевод быстрее, чем двоичные данные могут быть прочитаны. Резюме: время, полученное путем удаления перевода, затмевается более крупными потребителями времени, такими как ввод-вывод файлов и контекстные переключатели.

Снижение полезности данных

Другие приложения могут обрабатывать текстовое представление чисел с плавающей запятой, чем двоичное представление. С текстовым представлением данные могут быть легко использованы в электронных таблицах, текстовых процессорах и инструментах анализа. Файлы, содержащие двоичные представления, требуют больше усилий. Когда вы в последний раз пытались прочитать файл двоичных чисел с плавающей запятой в электронную таблицу? Не оценивайте будущий потенциал файлов данных.

Профиль до оптимизации.

Изменение представления данных является одной из форм оптимизации. Правилами оптимизации (в порядке важности) являются:

Читайте также: