Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

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.

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

:(

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:

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);

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 :D

Danke für die Hilfe

... bis zum nächsten mal ;)

Hab es :marine :bimei :OD

Danke, für die Denkanstöße ... die waren sehr anstößig :D 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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.