G
Hallo,
vielen Dank für eure beiden Antworten. Den RCC habe ich mir angeschaut und ausprobiert und, naja, damit ginge es wohl auch, wenn sich nichts anderes findet.
Ich hatte gestern auch schon zum Teil eine eigene Lösung aus verschiedenen Quellen zusammenkopiert, aber da wurden noch einzelne Werte falsch ausgegeben. Zwischendrin tauchten Werte, wie z.B. 0xfffff89 , auf.
Die Antwort bezüglich xxd habe ich jetzt erst gesehen. Das werde ich mir bei Gelegenheit vielleicht auch noch einmal näher anschauen.
Viele Grüße
gelignite
--------------
P.S.
Zwischenzeitlich konnte ich bei meinem Ansatz aber den Fehler beseitigen und komme auch damit zum Ziel. Der Vollständigkeit halber (für die Nachwelt):
#include <iostream>
#include <iomanip>
#include <boost\filesystem.hpp>
int main( int argc, char** argv )
{
boost::filesystem::directory_iterator
it( argv[1] ),
itEnd;
// Walk through given folder
for( ; it != itEnd; ++it )
{
boost::filesystem::path pFile( it->path() );
if( pFile.extension().string() == ".exe" )
{
std::cout << "Skipping " << pFile.string() << " ..." << std::endl;
}
else
{
std::cout << "Processing " << pFile.string() << " ..." << std::endl;
//read
std::ifstream input( pFile.string(), std::ios::binary );
std::vector<char> buffer( (std::istreambuf_iterator<char>(input)), (std::istreambuf_iterator<char>()) );
//write (formatted)
const int iSize = buffer.size();
std::string sOutfile( pFile.replace_extension( ".txt" ).string() );
std::ofstream out( sOutfile, std::ofstream::binary );
out << "static const unsigned char "
<< pFile.filename().stem().string()
<< "_"
<< pFile.filename().extension().string().substr(1) // remove "." from ".ext"
<< "[] = {" << '\r' << '\n';
out << std::hex << std::setfill('0');
for( int i = 0; i < iSize; ++i )
{
// line break every 16 bytes
if( i > 0 && i % 16 == 0 )
{
out << '\r' << '\n';
}
out << "0x" << std::setw(2) << static_cast<int>( *reinterpret_cast<unsigned char*>( &buffer[i] ));
// separator
if( i < iSize - 1 )
{
out << ",";
}
}
out << '\r' << '\n' << "};";
out.close();
}
}
return 0;
}