Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

17.05.2009, 01:38

Frage bzgl. binärem Einlesen von Zahlen

Eigentlich ja keine Herausforderung. Aber kann mir jemand erklären, warum die Werte von nFormat nach

C-/C++-Quelltext

1
2
unsigned short nFormat;
fIn >> nFormat;
bzw.

C-/C++-Quelltext

1
2
3
4
char* pc = new char [2];
fIn >> pc[0];
fIn >> pc[1];
unsigned short nFormat = *((unsigned short*)pc);
verschieden sind? Das Objekt fIn ist wie folgt definiert:

C-/C++-Quelltext

1
std::ifstream fIn (sFile.c_str (), std::ios::in | std::ios::binary);


Danke im Voraus
<< an dieser Stelle ist eine Signatur verstorben >>

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

2

17.05.2009, 02:15

Was ist im File, welche Werte kriegst Du? Würde auf den ersten Blick nur vermuten, dass bei 1) der Wert, der im File steht, auch als Wert von nFormat eingelesen wird, während bei 2) der ASCII-Wert des/der chars genommen wird.
Eat a beaver - Save a tree.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

17.05.2009, 08:25

Ich würde sagen, der ">>"-operator ließt nicht nur ein Zeichen, sondern alles bis zum nächsten leerzeichen oder so...
versuch es mal mit "fIn.read"... da kannst du dann auch die Größe angeben, die gelesen werden soll.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

17.05.2009, 11:44

Wie schon angeklungen: Wenn du auf einer Datei binär (in dem Sinn wie man es in dem Zusammehang üblicherweise meint) lesen/schreiben willst dann nimm stream.read() bzw. stream.write(). Die >> und << operatoren kümmern sich um formatierten input/output, lesen/schreiben die Daten also als Text.

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

5

17.05.2009, 14:22

Zitat von »"dot"«

Die >> und << operatoren kümmern sich um formatierten input/output, lesen/schreiben die Daten also als Text.

Ich dachte, genau dafür existiert das ios::binary Flag? Um dem Stream mitzuteilen, dass man Daten binär lesen möchte?
<< an dieser Stelle ist eine Signatur verstorben >>

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

6

17.05.2009, 14:33

Zitat von »"the[V«

oid"]

Zitat von »"dot"«

Die >> und << operatoren kümmern sich um formatierten input/output, lesen/schreiben die Daten also als Text.

Ich dachte, genau dafür existiert das ios::binary Flag? Um dem Stream mitzuteilen, dass man Daten binär lesen möchte?
Nein, die einzige Wirkung von dem Flag ist, dass wenn man ein '\n' schreibt, das unter Windows nicht in "\r\n" umgewandelt wird..

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

17.05.2009, 14:35

Zitat von »"the[V«

oid"]Ich dachte, genau dafür existiert das ios::binary Flag? Um dem Stream mitzuteilen, dass man Daten binär lesen möchte?


Nein. Dateien sind eigentlich immer binär (was sollten sie sonst sein!?). Der Unterschied zwischen Textmodus und Binärmodus ist, dass im Textmodus bestimmte systemabhängige Zeichenkombinationen (wie z.B. newline oder eof) erkannt werden. Dateien die im Binärmodus geöffnet sind liefern hingegen einfach alle Bytes 1:1 wie sie in der Datei stehen.

Werbeanzeige