2017-05-08 2 views
0

Ich versuche gerade, die sfml .loadfrommemory-Methoden zu verwenden.Wie speichert man eine Datei als Byte-Array in einer Textdatei? C++

Mein Problem ist, dass ich nicht weiß, wie eine Datei als Byte-Array. Ich habe versucht, etwas zu programmieren, aber es liest nicht die ganze Datei, und gibt mir nicht die wahre Größe der Datei. Aber ich habe keine Ahnung warum.

Hier ist mein eigentlicher Code:

using namespace std; 

if (argc != 2) 
    return 1; 

string inFileName(argv[1]); 
string outFileName(inFileName + "Array.txt"); 

ifstream in(inFileName.c_str()); 

if (!in) 
    return 2; 

ofstream out(outFileName.c_str()); 

if (!out) 
    return 3; 

int c(in.get()); 

out << "static Byte const inFileName[] = { \n"; 

int i = 0; 

while (!in.eof()) 
{ 
    i++; 
    out << hex << "0x" << c << ", "; 
    c = in.get(); 

    if (i == 10) { 
     i = 0; 
     out << "\n"; 
    } 
} 

out << " };\n"; 

out << "int t_size = " << in.tellg(); 
+0

Laufen Sie auf Windows? Wie viel von der Datei wird nicht gelesen? Könnte es sein, dass '\ r' Charaktere verschluckt werden? –

+0

@Martin: IIRC, das EOF-Zeichen (26) hat in einigen Implementierungen auch Auswirkungen auf 'ifstream' im Textmodus. –

+0

@BenVoigt - eigentlich, nein, ist er nicht. Die Definition von 'c' (vor dem Schreiben des Anfangs des Arrays) ruft 'in.get()' auf. –

Antwort

0

hätte es funktioniert!

Ich habe es funktioniert, indem Sie einfach die Daten in einem Vektor speichern.

Nachdem ich alle Bytes bekommen habe, habe ich es in eine TXT-Datei geschrieben.

#include <iostream> 
#include <sstream> 
#include <fstream> 
#include <vector> 

int main(int argc, const char* argv[]) { 

if (argc != 2) 
    return 1; 

std::string inFileName(argv[1]); 
std::string outFileName(inFileName + "Array.txt"); 

std::ifstream ifs(inFileName, std::ios::binary); 

std::vector<int> data; 

while (ifs.good()) { 
    data.push_back(ifs.get()); 
} 
ifs.close(); 

std::ofstream ofs(outFileName, std::ios::binary); 

for (auto i : data) { 

    ofs << "0x" << i << ", "; 

} 

ofs.close(); 

return 0; 

}

Verwandte Themen