-
Автор темы
- #1
Вновь изобретенный велосипед, но пришлось писать....
перегоняет указанный файл в массив байт. просто, быстро, красиво....
на выходе получаем .h фаил с тем же названием что и исходный файл с примерно таким содержимым:
Имя массива принимает имя файла, но с удалением всех спец символов и символов табуляции(курим std::isalnum())
зы: С++17
Готовая программа:
перегоняет указанный файл в массив байт. просто, быстро, красиво....
Код:
#include <iostream>
#include <sstream>
#include <Windows.h>
#include <fstream>
#include <iomanip>
#include <cctype>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
bool GenerateCode(std::string file)
{
const fs::path FilePath = file;
std::ifstream GenerateFile(FilePath, std::ios::binary);
if (GenerateFile.fail()) {
std::cout << "Не удалось открыть фаил!" << std::endl;
return false;
}
std::cout << "Open file: " << FilePath << "\n" << std::endl;
GenerateFile.seekg(0, std::ios_base::end);
size_t sizeFile = GenerateFile.tellg();
std::cout << "Size: " << sizeFile << std::endl;
GenerateFile.seekg(0, GenerateFile.beg);
std::string szNameFile = FilePath.stem().string();
std::string szOutFile = szNameFile.append(".h");
std::cout << "Out File: " << szOutFile << std::endl;
std::ofstream StreamOut(szOutFile, std::ios::trunc);
if (StreamOut.fail()) {
std::cout << "Не удалось создать фаил!" << std::endl;
return false;
}
std::string szNameArarry = FilePath.stem().string();
szNameArarry.erase(std::remove_if(szNameArarry.begin(), szNameArarry.end(),
[](auto const& c) -> bool
{
return !std::isalnum(c);
}),
szNameArarry.end());
StreamOut << "//GenerateCode by Крайслер, 2018\n\n//File size: " << sizeFile << std::endl;
StreamOut << "unsigned char " << szNameArarry << "[] =" << std::endl;
StreamOut << "{" << std::endl;
StreamOut << "\t";
std::stringstream ss;
ss << std::hex << std::uppercase << std::setfill('0');
const char* separator = "";
int col = 0;
auto it = std::istreambuf_iterator<char>(GenerateFile);
auto eof = std::istreambuf_iterator<char>();
while (!it.equal(eof)) {
unsigned int c = *it++ & 0xFF;
ss << separator << "0x" << std::setw(2) << c;
separator = ", ";
if (++col % 16 == 0) {
if (it != eof) {
ss << "," << std::endl;
ss << "\t";
separator = "";
}
}
}
StreamOut << ss.str();
StreamOut << std::endl;
StreamOut << "};" << std::endl;
GenerateFile.close();
StreamOut.close();
}
Код:
//GenerateCode by Крайслер, 2018
//File size: 223233
unsigned char PicPng[] =
{
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x02, 0xA0, 0x00, 0x00, 0x01, 0x05, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3C, 0x05, 0x55,
0x05, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x01, 0xD9, 0xC9, 0x2C, 0x7F, 0x00, 0x00,
0x00, 0x20, 0x63, 0x48, 0x52, 0x4D, 0x00, 0x00, 0x7A, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00,
....................
0xEE, 0xFA, 0x21, 0xDF, 0xE3, 0xCD, 0x3F, 0x5F, 0xE1, 0x04, 0xEF, 0x0B, 0x77, 0x58, 0x11, 0xDF,
0xAF, 0x99, 0xD7, 0xC6, 0x08, 0xEC, 0xD1, 0xA3, 0xC7, 0x3D, 0x8C, 0xFF, 0x1F, 0xC4, 0x7A, 0x58,
0xD5, 0x06, 0x4C, 0x0A, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60,
0x82
};
зы: С++17
Готовая программа:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Последнее редактирование: