В программировании часто встречается задача преобразовать содержимое какого-нибудь файла в содержимого массива констант. Например, у Вас есть графика картинки в виде файла BMP, и для его вывода на индикатор нужно получить массив примерно такого вида:
const unsigned char __256x64_greyscale_4bit_bmp[] = {
0x42, 0x4d, 0x78, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00,
0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00,
...
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00
};
Задача вроде бы простая, но самому писать утилиту конвертации не хочется. Какие есть готовые программы, которые позволяют получить текстовый дамп двоичного файла?
1. bmptoc.exe. 2. bin2C компании Segger. 3. hextools. 4. xxd Linux.
Примечание: все описываемые утилиты можно скачать в архиве по ссылке [1].
Обратное преобразование - из HEX-дампа в двоичный файл - позволяют делать утилиты hextools и xxd.
[bmptoc.exe]
Это простая утилита с открытым исходным кодом. Она предназначена для вывода HEX-дампа растра монохромных файлов BMP, вырезая заголовок (что удобно для создания знакогенераторов), и также может выводить HEX-дамп всего файла целиком (опция -noheader). При запуске без опций утилита выведет экран подсказки.
Simple BMP to dump converter utility.
Usage: bmptoc.exe filename[.bmp] [outputfilename] [-raw] [-noheader] [-i]
If outputfilename omitted, dump filename[.bmp] to console.
-raw option mean no cut additional line aligment bytes.
-noheader simply convert source as binary file.
-i inverse.
Если имя входного файла опущено, то HEX-дамп будет выведен в окно консоли. Опция -raw оставляет в HEX-дампе завершающие нулевые байты выравнивания файла BMP (эти байты не несут никакой полезной информации, они нужны только для подгонки размера файла формата BMP под кратность 4 байтам). Опция -noheader отключает анализ заголовка файла BMP, при этом в HEX-дамп попадут все байты вместе с заголовком (эта опция позволяет конвертировать в HEX-дамп любые файлы, не только файлы BMP). Опция -i инвертирует монохромную графику при выводе в HEX-дамп.
[bin2C]
Эта утилита удобна тем, что позволяет сразу получить и модуль на языке C, и заголовок к нему. В модуле будет сформирован обычный массив из данных входного файла. При запуске без опций утилита выведет экран подсказки.
Bin2C.exe (c) 2002 - 2015 SEGGER Microcontroller --- www.segger.com
Usage:
Bin2C < infile > < outfile >
where < infile > is the input binary (or text) file (with extension) and
< outfile > is the name (without extension) of the .c and .h files to create
.
Example:
Bin2C index.html index
Press any key to exit...
Для конвертации нужно обязательно указать и имя входного, и имя выходного файла (без расширения). Пример:
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.
c:\temp>xxd -h
Usage:
xxd [options] [infile [outfile]]
or
xxd -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]
Options:
-a toggle autoskip: A single '*' replaces nul-lines. Default off.
-b binary digit dump (incompatible with -ps,-i,-r). Default hex.
-c cols format < cols > octets per line. Default 16 (-i: 12, -ps: 30).
-E show characters in EBCDIC. Default ASCII.
-g number of octets per group in normal output. Default 2.
-h print this summary.
-i output in C include file style.
-l len stop after < len > octets.
-ps output in postscript plain hexdump style.
-r reverse operation: convert (or patch) hexdump into binary.
-r -s off revert with < off > added to file positions found in hexdump.
-s [+][-]seek start at < seek > bytes abs. (or +: rel.) infile offset.
-u use upper case hex letters.
-v show version: "xxd V1.10 27oct98 by Juergen Weigert (Win32)".
Пример командной строки для получения HEX-дампа (в результате получится текстовый файл 256x64-greyscale-4bit.txt):
xxd 256x64-greyscale-4bit.bmp >256x64-greyscale-4bit.txt
Пример командной строки для обратного преобразования (из HEX-дампа будет получен двоичный файл):
xxd -r 256x64-greyscale-4bit.txt 256x64-greyscale-4bit.bmp
Подробную документацию по использованию xxd см. в статье [3].
[Ссылки]
1. 151212bin2c-utils.zip. 2. Подготовка растровых картинок для индикатора OLED WEX025664. 3. man xxd (1). |