FighterFigger Geschrieben 4. Dezember 2002 Geschrieben 4. Dezember 2002 Schon wieder muß ich auf grund von Unwissenheit die Community um Rat bitten ... Hallo erstmal! Ich habe vor in eine Datei Werte zu speichern, allerdings hat sich mein C++ irgendwie komisch. Nehme ich einen ofstream ("...", ios::binary), und schreibe 0 hinein, dann schreibt er mir ASCII-Zeichen '0' (also 0x30) hinein. Ich will aber 0 (also 0x0000) eintragen. Auch long-Werte vollständig mit allen hexadezimal-Stellen (zB: 0x25F1 0000) kann ich nicht richtig eintragen. 0 bekomme ich nur geschrieben, wenn ich mit '\0' arbeite, aber dann nicht als führende Nullen von Zahlwerten. 1.) Mache ich da was falsch, oder geht das mit Streams nicht? 2.) Ich nutze MFC, gibt es da File-Typen, die ich bevorzugen sollte, weil sie dieses können? 3.) Bin ich einfach zu [****] dazu? :confused: Zitieren
Crush Geschrieben 4. Dezember 2002 Geschrieben 4. Dezember 2002 Wenn Du den 0er als String schreibst ist ja klar, daß auch ein ASCII-0 geschrieben wird und kein 0x00. Vielleicht solltest Du mal posten was Du genau geschrieben hast. Zitieren
FighterFigger Geschrieben 4. Dezember 2002 Autor Geschrieben 4. Dezember 2002 Oh - ich versuchte einiges ... Sogar zum Teil mehr aus Verzweifelung als aus Hoffnung. So versuchte ich auch Sachen, die garnicht richtig sein konnten. #include <fstream> #include <iostream> ... std::ofstream aout("myfile.dat", std::ios::binary); aout << 0; //0x30 aout << (short)0; //0x30 aout << std::hex << 0; //0x30 aout << "\0"; //nix aout << '\0'; //0x00 (so in etwa sollte das werden) aout << NULL; //nix aout.write(0, 1); //0x30 '\0' gab schon ein richtiges Ergebnis mit seinen 0x00, aber eben nur ein Byte. Will ich zwei Byte, dann muß ich das zweimal schreiben (damit könnte ich leben), aber dynamisch ein Long auffüllen, wenn er klein genug ist, in 2 Byte zu passen, das ist unbequem, und doch sicherlich unnötig ... oder? Irgendwie schreibt er immer den ACII-lesbaren Wert hin, anstatt einer Computerzahl. (im File soll statt zB: "230" das ASCII-Zeichen von 230 stehen. Bei größeren Zahlen (zB:70000) eben solche Zeichen, deren Bitwerte denen der Zahl entsprechen, während sie im Speicher verweilt) ... Ich hoffe, jemand versteht, was ich meine ... Ich bin nämlich reichlich blind. Die Antwort ist sicherlich einfach, aber ich finde es einfach nicht Zitieren
Klotzkopp Geschrieben 4. Dezember 2002 Geschrieben 4. Dezember 2002 aout.width( 4 ); aout.fill( '0' ); Zitieren
FighterFigger Geschrieben 4. Dezember 2002 Autor Geschrieben 4. Dezember 2002 Na, das löst ja nur das Problem mit der Null ... Wie speichere ich den Wert (short)19778 (also 0x4D42) als "BM" (nebenbei also mit invertierten Bytes) ... wie nur??? ... wie? :confused: Zitieren
Crush Geschrieben 4. Dezember 2002 Geschrieben 4. Dezember 2002 Für sowas gibts put() std::ofstream aout("c:\\tmp\\myfile.dat", std::ios::binary); aout << "test"; aout.put(0x0d); aout.put(0x0a); aout.put(0x4d); aout.put(0x42); aout.put(0-0x4d); aout.put(0-0x42); aout.put(0xff); Zitieren
FighterFigger Geschrieben 5. Dezember 2002 Autor Geschrieben 5. Dezember 2002 hmmm ... Na ok :marine Dann "schneide" ich die Werte halt per Hand in praktische, kleine Bytes, um sie dann zu puten. Schade eigentlich, aber wenn ich mir den Stream ableite, bau ich mir ein bequemes Interface Danke für die Hilfe ... bis zum nächsten mal Zitieren
FighterFigger Geschrieben 5. Dezember 2002 Autor Geschrieben 5. Dezember 2002 Hab es :marine :bimei :OD Danke, für die Denkanstöße ... die waren sehr anstößig und brachten mich dazu: UINT openFlags = CFile::typeBinary | CFile::shareDenyWrite | CFile:: modeWrite | CFile:: modeCreate; CFile aout("C:\\WinNT\\Desktop\\myfile.dat", openFlags); long l1 = 70000; long l2 = 255; aout.Write(&l1, 4); aout.Write(&l2, 4); aout.Close(); So schreibt er genau das, was ich will. Ich gebe ihm eine Adresse und die Anzahl der Zeichen. Das rockt! DANKE an euch PS: :mod malt er immer da, wo ich " : : m o d e " stehen habe Zitieren
Crush Geschrieben 5. Dezember 2002 Geschrieben 5. Dezember 2002 Ich arbeite auch immer mit CFile =8-) gibt mehr Freiräume. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.