Форум программистов, компьютерный форум, киберфорум
Проекты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601

bin2cpp конвертер бинарных файлов в C++ файлы

14.08.2025, 23:38. Показов 5275. Ответов 82

Студворк — интернет-сервис помощи студентам
Написал конвертер бинарных файлов в C++ файлы. Это нужно для кроссплатформенного внедрения ресурсов в исполняемый файл. Из любого файла можно создать, например, заголовочный файл, внутри которого будет массив с данными. Соответственно, потом можно работать с этими данными непосредственно в памяти.
Публикую прогу для тех, кого может заинтересовать. Полагаю, что похожих программ в инете много, но возможно кому-то понравится именно моя. Тем более, те программы, которые я встречал, работали медленнее, чем моя, и не имели графического интерфейса. Например, как видно на скриншоте на гитхабе, шрифт OpenSans конвертировался за 14 миллисекунд.
Одним словом, хотите пользуйтесь, не хотите - не пользуйтесь.

Скачать можно здесь: https://github.com/RoyalXXX/bin2cpp. Там я выложил, в том числе, уже скомпилированные бинарники.

Доступны две версии:

1. оконная версия bin2cpp GUI - работает быстрее консольной, есть проверка на валидность имен.

2. консольная версия bin2cpp console (её код открыт и любой может использовать по лицензии MIT - одна из самых свободных лицензий). Эта версия чуть попроще, поскольку имена не проверяются на корректность. И она чуть медленнее, чем версия с оконным интерфейсом - там я немного иначе реализовал. Если будете сами компилировать, то советую использовать mingw-w64-ucrt-x86_64-gcc. Программа, скомпилированная этим компилятором, работает быстрее, по крайней мере, у меня.

В обеих версиях есть показ времени конвертирования и вывода прогресса конвертирования.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2025, 23:38
Ответы с готовыми решениями:

Конвертер Исходных кодов
Здравствуйте! Появилась отличная идея! Вообщем, создать программу в которую пользователь загружает...

Создание бинарных файлов. Чтение и запись бинарных файлов
Здраствуйте. Сколько я не рылся в нете сколько не искал, как то все не доходит до меня тупого). На...

Почему так(комбинации бинарных и не бинарных вводов и выводов)?
#include <string> #include <iostream> #include <fstream> #include <iomanip> using namespace...

82
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
18.11.2025, 13:14  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
проблема в том, что тыя страдаем хернёй.
ну так критиковать нужно не мою программу, а саму идею

Согласен, что данная идея это не панацея и не самый лучший вариант для внедрения ресурса в исполняемый файл.

Ну а посоветуй другой кроссплатформенный метод? Я все анализировал - все методы говно.

Есть, например, такой метод - https://github.com/graphitemaster/incbin . Но там сложно с поддержкой компиляторов. Это тоже не вишенька bin2cpp конвертер бинарных файлов в C++ файлы

К тому же, если писать скатерть под каждый компилятор, то а почему не написать код с учетом разных платформ. Типа использовать платформозависимые методы внедрения ресурсов. Но это уже не то. Совершенно другой проект.
0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
18.11.2025, 13:21
Цитата Сообщение от Royal_X Посмотреть сообщение
ну так критиковать нужно не мою программу, а саму идею
с идеей все нормально, акромя того, что она не тянет на Проекты.

я вникал уже в детали -
такое понадобиться, когда у вас есть нечто серьезное,
а пока его нет, то оно и нафик не нужно,
а когда это серьезное наконец то появится,
то и без этого тоже можно обойтись или тебе сделает такое дипсик за за 1 минуту ...

поэтому эта фича есть фетишь.

печка:
Бизнес строят не технологии, а понимание проблем клиентов!
вот отсюда начинай в следующий раз плясать.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
18.11.2025, 13:37  [ТС]
XLAT, таких похожих программ много. Но все они консольные и медленные. У меня была цель сделать с удобным графическим интерфейсом и быструю. К тому же, это мой пет-проект для обучения.

Цитата Сообщение от XLAT Посмотреть сообщение
не тянет на Проекты
а когда в разделе Проекты на этом форуме был какой-нибудь серьезный проект? этот раздел как раз для таких фетишей)

Цитата Сообщение от XLAT Посмотреть сообщение
оно и нафик не нужно
штука и вправду бесполезная или малополезная

Цитата Сообщение от XLAT Посмотреть сообщение
тыя страдаем хернёй
ты меня заразил этим)

ты же любишь всякие мелкие бесполезные пет-проекты типа Webp2Jpeg. Да и у тебя в https://github.com/BDOTimer?tab=repositories всякие калькуляторы, тетрисы, саперы, пятнашки - сборник фетишей

С другой стороны, от таких пет-проектов есть какая-то польза, ведь, как-никак учишься чему-то новому.
В худшем случае, увеличивается скорость набора кода на клаве.
1
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
18.11.2025, 13:39
Цитата Сообщение от Royal_X Посмотреть сообщение
с удобным графическим интерфейсом
не смеши меня, пожалуйста.

у меня самый удобный интерфейс - ТОЛЬКО ОДНА КНОПКА, КОТОРУЮ НУЖНО НАЖАТЬ ТОЛЬКО ОДИН РАЗ!

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

вот тут про твою историю(с медведями на велосипеде) с поправкой на масштаб всё написано:
https://www.cyberforum.ru/blogs/499387/6558.html
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
18.11.2025, 13:43  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
вот тут про твою историю всё написано:
много букаффф

0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
18.11.2025, 13:45
Цитата Сообщение от Royal_X Посмотреть сообщение
много букаффф
выше поправил про твой случай на минималках))

когда твои клиенты тебе скажут, "чувак, нам это не надо",
то ты их должен будешь услышать,
но ещё раньше ты их должен будешь об этом спросить.

такой проект годный, как лаба по обучению кодингу, но не более.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
18.11.2025, 13:58  [ТС]
XLAT, если говорить, что простые продукты вытесняют сложные, то тут и "Да" и "Нет".

Я вот заметил, что в Google Play особо популярны самые банальные игры, которые делаются за час, и в которые играть очень легко (т.е. на одной извилине можно). Такая же история и на itch.io. Человек может сделать игру с огромным миром, 10 лет создавать ее в одиночку, но никто не будет в нее играть, даже если она хорошая. Но вот какие-то мелкие игры особо популярны.
Просто посмотри на эти игры https://itch.io/games

Но не всегда простой продукт популярнее продукта с продвинутым интерфейсом. Тут нужно понять, для какого контингента делается программа. Если конечные пользователи это школоло, то можно создать графический редактор с одной кистью. Если конечные пользователи это дизайнеры, то нужно создать фотошоп с 1000 кнопками.

Цитата Сообщение от XLAT Посмотреть сообщение
"чувак, нам это не надо"
чтобы понять, что нужно людям, а что нет, я периодически публикую всяких кроликов на сайтах, которые показывают аналитику. И у меня уже есть кое-какое представление, что нужно людям. Иногда я даже удивляюсь, когда мой какой-то второстепенный проект набирает популярность к моему большому удивлению. И, наоборот, бывает, что я много старался, но никто не скачивает.
То, что bin2cpp особо никому не нужен, это так. Я сам это вижу.
1
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
18.11.2025, 14:07
Royal_X,
вот тя домашнее задание:
уболтай Натальюб создать тему "Какой проект на С++ мне сделать, чтобы я смог купить собственный самолет?"

мне понравился ответ с юмором от квен:

другой вар от топовой нс тоже интересный...

я полагаю, что у Натальиб уже есть свой самолет)
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
08.07.2026, 10:10  [ТС]
Перешел с constexpr uint8_t на inline constexpr uint8_t

это повышает версию с С++11 до С++17

но имеет свои преимущества, о чем написал в описании на гитхабе:

This makes it safe to include this header from multiple translation units without violating the One Definition Rule (ODR) — the linker will merge all copies into a single instance. If you need to target C++11 or C++14, remove the inline keyword. However, without inline, this header must only be included in a single .cpp file, otherwise each translation unit that includes it will get its own separate copy of the array, silently bloating the final binary with duplicate data.
Другими словами, при прежнем подходе, если несколько cpp файлов использовали хидер с данными, то размер бинарника набухал из-за лишних копий данных. Теперь так не происходит.

Но можно убрать inline и дальше пользоваться на С++11, особенно, если хидер будет использоваться только в одном cpp файле.
Также, существуют методы с помощью extern, которые позволяют обойти этот недостаток посредством создания двух файлов, но выглядит это некрасиво. С inline современнее. К тому же, С++17 в 2026 году это норм.
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
11.07.2026, 23:41
Цитата Сообщение от Royal_X Посмотреть сообщение
Из любого файла можно создать, например, заголовочный файл
Аналог xxd что ли?
Цитата Сообщение от Royal_X Посмотреть сообщение
и не имели графического интерфейса
Да, отсутствие графического интерфейса - существенный плюс. Можно просто встроить такую утилиту в систему сборки, без необходимости каждый раз отвлекаться и куда-то кликать.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
12.07.2026, 00:13  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Аналог xxd что ли?
не знаю такого. Но те аналоги, которые находил в инете, либо были гуанокодом, либо работали медленнее моего приложения.
я лично тестировал прибл. 5-6 таких похожих утилит, некоторые даже были очень популярны, но все проиграли по скорости моему приложению

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Да, отсутствие графического интерфейса - существенный плюс.
одно другому не мешает. Я выпустил в двух версиях: оконной и консольной. Код консольной даже открыт. Но там нет ничего особенного, простое конвертирование.
Однако, я больше работал над оконной версией и его код отличается от консольной - я там больше оптимизациями занимался, оконная версия должна быть быстрее.

Мне, наоборот, больше нравится пользоваться графическим интерфейсом.
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
12.07.2026, 01:52
Цитата Сообщение от Royal_X Посмотреть сообщение
не знаю такого.
Странно. Это одна из известных утилит. Еще из похожих - hexdump.
Я ими пользовался чтобы встроить wav / mp3 в прошивку контроллера.
Цитата Сообщение от Royal_X Посмотреть сообщение
я лично тестировал прибл. 5-6 таких похожих утилит, все проиграли по скорости моему приложению
Даже если и так. 0.0001 сек не играет никакой роли по сравнению с самим наличием утилиты в сборочном окружении.
Цитата Сообщение от Royal_X Посмотреть сообщение
оконная версия должна быть быстрее.
Ну и зря. Почему - уже сказано. Если уж вам так хочется тратить время на ненужные клики мышью, так сделали бы нормальную утилиту, а к ней - графическую оболочку, которая просто вызывала бы первую с нужными ключами.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
12.07.2026, 08:21  [ТС]
COKPOWEHEU, как уже писал выше, есть очень много похожих консольных приложений. Даже если они проигрывают моей по скорости, все равно они популярнее, чем моё. Поэтому, люди, которым будет необходимо консольное приложение, выберут более популярное приложение, а не моё. Таким образом, я изначально знал, что моё консольное приложение не может конкурировать с теми, которые на протяжении многих лет уже сделали себе имя, получили звезды на гитхабе и пр.
По этой причине, я хоть тоже выпустил консольную версию, но решил сделать акцент на оконной версии, поскольку таких я вообще не нашел. Скорее всего, моё приложение это единственное из приложений такого рода, которое имеет графический интерфейс. Т.е. я решил завоевать нишу.
Статистика на sourceforge показывает, что многим всё-таки нужна версия с GUI.
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
12.07.2026, 12:32
Даже так было бы более логично сделать оболочку. То есть отдельно ваше же консольное приложение, и отдельно графическое, которое бы подхватывало не только ваше, но и сторонние.
Цитата Сообщение от Royal_X Посмотреть сообщение
Скачать можно здесь: https://github.com/RoyalXXX/bin2cpp.
Не увидел там исходников от оконной версии, но есть опасение, что win-only.
По консольной версии - много внимания уделено абсолютно ненужной ерунде вроде подсчета времени или декорациям внутри файла.
Вы же не будете встраивать в программу гигабайты в виде инклюдов, значит, обработка одного файла это максимум единицы минут, а типично - доли секунды. (только что проверил, файл на 3.3 ГБ конвертировался xxd за 5 минут). Ваши средства синхронизации только впустую тратят процессорное время.
Собственно, если вам так критична скорость, так использовали бы отображение файлов на память (mmap) и, возможно, многопоточность. Хотя вот это вряд ли бы помогло: перекодирование одного байта в шесть происходит мгновенно, потери времени будут на работу с диском.

Не по теме:

Хм... даже интересно, сумею ли я написать подобную штуку более эффективно...


Еще вы добавляете в финальный файл всякие шапки, инклюды и тому подобное. Проще выдавать в виде просто набора байтов, а юзер пусть сам инклюдит куда хочет и как хочет:
C
1
2
3
PROGMEM const uint8_t some_image[] = {
  #include "some_image.h"
};
Впрочем, xxd тоже добавляет подобные декорации - возможно, это для чего-то используется.
У вас нет никаких настроек. Ни отключить шапки, ни группировать байты в 8, 16, 32-битные слова, ни выбрать с какого по какой байт использовать. А это нужно, например, для встраивания всяких bmp или wav чтобы откусить заголовок или выбрать нужный фрагмент. Да и для обычных файлов бывает полезно. Но тут другая проблема: обработка обычных файлов идет конвейером, stdin - stdout, ваша "консольная" утилита стандартный интерфейс не поддерживает.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
12.07.2026, 12:59  [ТС]
COKPOWEHEU, да, оконная версия Win-only. Собственно, приложение написано на wxWidgets, что позволяет очень легко выпустить для других платформ. Но полагаю на других платформах, особенно на Linux, люди будут предпочитать консольную версию. Так что, графический интерфейс понравится больше вендузятникам.
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
12.07.2026, 14:15
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Хм... даже интересно, сумею ли я написать подобную штуку более эффективно...
Таки попробовал. Отчет по файлу 3.3 ГБ
xxd, как некий эталон: 5:36
Простейшая версия, читающая по 1 байту и пишущая по 6: 6:33 (странно, что медленнее xxd. Вероятно, надо буферизовать ввод-вывод).
mmap: 4:21
По-хорошему, надо бы еще распараллелить конвертацию, но сейчас уже не успеваю. Возможно, потом.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
12.07.2026, 14:33  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Отчет по файлу 3.3 ГБ
если исходный файл имеет такой размер, мне интересно, файл какого размера получается на выходе? И зачем такой огромный файл засовывать в бинарник?
0
 Аватар для COKPOWEHEU
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,065
12.07.2026, 19:01
Цитата Сообщение от Royal_X Посмотреть сообщение
если исходный файл имеет такой размер, мне интересно, файл какого размера получается на выходе?
Один байт кодируется 6 байтами: "0x??, ". Соответственно выходной файл в шесть раз больше входного.
Цитата Сообщение от Royal_X Посмотреть сообщение
И зачем такой огромный файл засовывать в бинарник?
Низачем. Просто иллюстрация, что даже такие монструозные файлы конвертируются единицы минут. А файлы более правдоподобного размера - менее секунды. В таких условиях нет никакого смысла добавлять шкалу прогресса. На ее синхронизацию уходит больше ресурсов, чем на собственно конвертацию.
---
А на счет дополнительных флагов все же подумайте. Задача выкусить у бинарника кусок откуда-нибудь из середины отнюдь не редкая.
Если уж решили сделать задачу конвертации не пакетной, а интерактивной, то стоит добавить интерактива. Просмотр участка памяти в виде hex и в виде строки (например, как сделано в hexdump), выбор начала и конца фрагмента. Редактирование отдельных байтов.
Сейчас ваша задача выглядит уж слишком простой, ее можно решить за пару часов.
0
338 / 130 / 10
Регистрация: 19.07.2024
Сообщений: 708
12.07.2026, 20:45
Цитата Сообщение от Royal_X Посмотреть сообщение
Написал конвертер бинарных файлов в C++ файлы. Это нужно для кроссплатформенного внедрения ресурсов в исполняемый файл. Из любого файла можно создать, например, заголовочный файл, внутри которого будет массив с данными.
Накуя оно нужно? Практически любой современный компоновщик умеет подключать бинарные файлы напрямую в результирующий образ (ну т.е. - я ещё не встречал ни одного не умеющего). Без ненужных операций.

Добавлено через 6 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
Поэтому на винде dll используется только для того, чтобы типа не раздуть размер exe и не раздражать антивирусов. Либо когда лицензия библиотеки заставляет использовать dll.
Не только. Другие назначения:
1. Вы делаете некую прогу, функционал которой юзер может расширять при помощи своих DLL.
2. Проге нужно проникнуть в память чужого приложения (для изменения его работы или ещё для чего-либо).
3. ...
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
12.07.2026, 21:46  [ТС]
Цитата Сообщение от jcxz Посмотреть сообщение
Накуя оно нужно?
советую изучить, чем отличается и каковы преимущества (а они есть) данного препроцессорного инструмента по сравнению с другими методами внедрения (посредством скрипта компоновщика на этапе линковки, через objcopy или через .incbin в ассемблере) и ваш вопрос просто отпадет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2026, 21:46

Конвертер бинарных данных
Хочу написать конвертер бинарного файла, который переводит его на читабельный вид. Есть описание...

Обработка текстовых файлов. Обработка бинарных файлов. Сериализация и десериализация объектов
Запросить у пользователя необходимость повторения работы программы. В случае если пользователь...

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

Какой путь бинарных файлов Апача в Ubuntu?
Zend Optimizer просит: какой путь бинарных файлов Апача в Ubuntu?

Обработка текстовых и бинарных файлов.
Текстовые №1. Создать два текстовых файла, слова, содержащиеся в обоих файлах одновременно, удалить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru