FighterFigger Geschrieben 4. Dezember 2002 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 4. Dezember 2002 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FighterFigger Geschrieben 4. Dezember 2002 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Dezember 2002 Teilen Geschrieben 4. Dezember 2002 aout.width( 4 ); aout.fill( '0' ); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FighterFigger Geschrieben 4. Dezember 2002 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 4. Dezember 2002 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FighterFigger Geschrieben 5. Dezember 2002 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 5. Dezember 2002 Teilen Geschrieben 5. Dezember 2002 Hauptsache es klappt! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FighterFigger Geschrieben 5. Dezember 2002 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 5. Dezember 2002 Teilen Geschrieben 5. Dezember 2002 Ich arbeite auch immer mit CFile =8-) gibt mehr Freiräume. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.