HexCode



  • Hallo Leute,

    Weiß jemand von euch, wie es möglich ist den HexCode einer Datei auszulesen?

    Bis jetzt habe ich folgendes Programm geschrieben:

    string files;
    ifstream dat_ein;
    
    dat_ein.open("C:\My.doc" , ios_base::in);
    if(!dat_ein)
    {
      cout << "Die ausgewählte Datei konnte nicht geöffnet werden!" << endl;
    }
    else
    {
    
    char zeichen;
    while(!dat_ein.eof())
    {
    dat_ein.get(zeichen);
    files += zeichen;
    }
    }
    
    dat_ein.close();
    

    Der Code macht auch genau das, was er tun soll: er liest die Datei aus, und speichert ihren Inhalt in der string-Variable files. Leider aber nur den Text der in der Datei gespeichert ist.

    Nun suche ich eine Möglichkeit den HexCode von Datein auszulesen.
    Wie muss ich mein Programm umschreiben?

    MfG Cfunc(y)



  • Was meinst du mit "Hex-Code"? Willst du Zeichenfolgen ala "A1 B5 ..." als Hex-Sequenzen einlesen? Wenn ja, das geht mit dem ganz normalen Eingabe-Operator:

    int zeichen;
    datein>>hex;//Eingabe in Hexadezimal-Modus setzen
    while(dat_ein)//prüft auf alle Fehlerflags - inkl. eof()
    {
      dat_ein>>setw(2)>>zeichen;
      files += static_cast<char>(zeichen);
    }
    


  • CStoll schrieb:

    Was meinst du mit "Hex-Code"?

    also Hintergrund meines Programms ist die Kopierfunktion von Microsoft.
    Ich will versuchen diese Funktion nachzubauen. Ich habe gelesen, dass anhand des HexCodes eine Datei erstellt werden kann, die absolut identisch mit der Ausgangsdatei ist.

    Mein Programm soll also etwas das machen:

    Datei Einlesen --> HexCode in String speichern --> Anhand von HexCode eine neue Datei mit dem gleichen Namen und gleicher Endung schreiben --> Kopieren fertig.

    Wie siehts aus, ist das mit dem HexCode möglich, oder brauche ich etwas anderes?

    Ich möchte nur nicht mein Programm mit Copy- Befehlen schreiben. Sicher - ein aufruf von

    System("copy Datei, Zielpfad");
    

    würde zunächsteinmal mein Problem lösen, aber das wäre dann Langweilig. Ich will ja den Tiefen-Teller neu erfinden. 😃

    MfG
    Cfuncy()



  • Da sollte dein obiger Code eigentlich funktionieren (nur solltest du nicht unbedingt erwarten, daß irgendwelche Binärdaten lesbar dargestellt werden können) - allerdings ist es eventuell erforderlich, die Datei im Binärmodus (ios::in|ios::binary) zu öffnen.



  • Nö, leider nicht.

    Hab auch die Idee mit dem binary versucht - aber das bringt auch nichts.

    Wenn ich mit dieser Methode z.B. eine Word-Datei kopieren will, erzeugt der Computer eine Datei mit Arabischen Schriftzeichen. 😡

    Irgend was läuft falsche!
    Wahrscheinlich muss ich wirklich direkt an den HexCode ran.

    Wenn ich den habe stellt sich aber auch noch eine neue Frage: Wie kann ich anhand dieses Codes datein erzeugen?

    Ich hab ma son experiment gemacht: Wenn du eine Word-Datei mit dem Text editor öffnest, und den Ihnalt rauskopierst hast du ein ziemliches Zeichenwirrwarr im Speicher. Wenn du dann in eine neue Textdatei (.txt) den Inhalt reinkopierst, und die Endung der Datei auf .doc setzt, bringt das garnichts. Du hast zwar ne Worddate, aber die hat nix mehr mit der originalen Worddatei zu tun.

    MfG Cfunc(y)



  • Wie gesagt - was erwartest du, wenn dein Computer irgendwelche Binärdaten als Text darstellen soll? Alles jenseits des ASCII-Zeichensatzes wird dann als Zeichensalat interpretiert.

    (und der Editor kann mit den Binärdaten von Word vermutlich genausowenig anfangen wie du)



  • Ich mag ja jetzt auf dem Schlauch stehen, aber was hat das ganze mit hex zu tun?

    Quelldatei binär in einen Buffer einlesen und danach diesen wieder binär in eine Datei schreiben... Oder hab ich irgendwas wichtiges überlesen?



  • so einfach ist es leider nicht. Einfach Binär öffnen und Schreiben bringt nichts. leider,.. (habs gerade ausprobiert)

    😞



  • Es ist so einfach wie Bloops schrieb, hab das vor Jahren schon mal getestet.

    Welche Headerfiles, Compiler und Betriebssystem verwendest du, ich meine da
    waren damals minimale Unterschiede.

    Wenn dein Quellcode nur eine Datei kopieren soll, waren das glaub ich je nach
    Umfang von minimalen Sicherheitsabfragen etwa 30 oder 40 Zeilen.

    Eventuell den ganzen bisherigen Code, ich denke etwa 30 Zeilen hier zeigen,
    dann kann man mehr sagen.



  • Hallo,
    der Beitrag ist zwar schon älter, aber ich hoffe, dass mir trotzdem noch jemand helfen wird... Ich will nämlich eine Bitmapdatei lesen (bis zu einer bestimmten Stelle). Am besten wäre es, wenn ich sie hexadezimal lesen könnte. Sollte das nicht gehen, reicht aber auch binär...
    Hier erst mal mein erster Code:

    #include<iostream>
    #include<fstream>
    using namespace std;
    
    int main()
    {
    	cout<<"Bitte geben Sie den Dateinamen einer 24-bit Bitmap Datei an (max. 15 Zeichen): "<<flush;
    	char name[15];
    	cin>>name;
    	system("cls");
    	ifstream einlesen;
    	einlesen.open(name, ios::in);
    	char zeichen;
    	int zahl;
    	while(einlesen.tellg()<54)
    	{
            einlesen.setf(ios::hex, ios::basefield);
    		einlesen.get(zeichen);
    		zahl=zeichen;
    		cout.setf(ios::hex, ios::basefield);
    		cout<<zahl<<flush;
    	}
    	system("pause");
    	return 0;
    }
    

    Ich hab schon sehr viele "Variationen" davon ausprobiert, bis jetzt erhalt ich aber immer nur quatsch als ausgabe. Entweder kommt gar nix oder eine sich unendlich wiederholende Zeichenfolge...
    Ich hab keine Ahnung was ich falsch mache... Ich hoffe ihr könnt mir helfen.
    Danke schon mal im Voraus!


Anmelden zum Antworten