Эксперт
			
			
				
					
				
			
		- Статус
 - Оффлайн
 
- Регистрация
 - 12 Июн 2014
 
- Сообщения
 - 994
 
- Реакции
 - 1,209
 
Вновь изобретенный велосипед, но  пришлось  писать....
перегоняет указанный файл в массив байт. просто, быстро, красиво....
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
на  выходе получаем .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
Готовая программа:
	Пожалуйста, авторизуйтесь для просмотра ссылки.
 
	Пожалуйста, авторизуйтесь для просмотра ссылки.
			
				Последнее редактирование: 
			
		
	
								
								
									
	
								
							
							
				