Die einfache Antwort ist nein. Der Modus wird bestimmt, wenn das iostream-Objekt erstellt wird, und kann nicht später geändert werden. Einige Implementierungen können ein Mittel, um es später, aber dies ist nicht standardisiert. Auf einigen Implementierungen, tun ein freopen auf stdout könnte den Modus ändern, obwohl ich denke, dass formal, dies ist verboten in C. (Es ist Implementierung in C. definiert) Und anscheinend funktioniert es nicht an Ihrer Implementierung. Youre beste Wette ist, um herauszufinden, wie Ihr System nennt das Konsolengerät (dev tty unter Unix CONS Ich glaube, unter Windows), öffnen Sie es in den gewünschten Modus, und die Ausgabe an sie. Ich versuche, eine Anweisung Pipeline Simulator zu bauen und Im mit einer Menge Ärger Erste Schritte. Was ich tun muss, ist zu lesen binär von stdin, und dann speichern Sie es im Speicher irgendwie, während ich die Daten zu manipulieren. Ich muss in Stücke von genau 32 Bits nacheinander lesen. Wie lese ich in Chunks von genau 32 Bits zu einem Zeitpunkt Zweitens, wie speichere ich es für die Manipulation später Heres, was Ive so weit, aber die Prüfung der binären Stücke las ich weiter lesen, es ist einfach nicht richtig aussehen, ich dont think Im Lesen Genau 32 Bits wie ich brauche. Wie lese ich in 32 Bits zu einer Zeit (sie sind alle 1 0, keine Zeilenumbrüche usw.), und was ich es in speichern, ist char okay EDIT: Ich bin in der Lage, die binäre in lesen, aber keine der Antworten produzieren die Bits In der richtigen Reihenfolge sind sie alle verstümmelt, vermute ich Endianness und Probleme beim Lesen und Verschieben 8 Bits um (1 char) zu einem Zeitpunkt dies muss auf Windows arbeiten und C. gefragt, können Sie nur lesen Entweder Byte für Byte oder 4 Bytes pro Anruf, da Sie die Daten in einem Puffer speichern müssen. Einmal hat Puffer speichert, was Länge der Daten, könnten Sie verarbeiten den Puffer 4 Byte von 4 Byte. Da stdin stdout ist zwar so streunig, so byte by byte ist natürlich auch. Anders als Sockel I O, normalerweise können Sie Byte-Auftrag auf stdin usw. ignorieren, selbstverständlich, wenn Sie brauchen. Do byte-order konvertieren Sie sich. Weil keine neue Zeile (z. B. 39n39), verwenden Sie lesen oder fread wäre besser. Bitte denke es als Stream. Ndash Test Oct 21 09 at 6:45 Keine dieser Lösungen lesen in der Binär in der richtigen Reihenfolge Hilfe bitte, Frist nähert. Ndash rlb. usa Plattformen sind kleine Endian, können Sie nicht erwarten, in c die Bits in der richtigen Reihenfolge zu haben. Ndash ntd Oct 23 09 am 13:09 1 ja I39ve oft darüber gefragt. What39s die Frage noch ndash Dead account Wie in binären Bits zu lesen und dann diese Bits in (vielleicht ungerade Größe) Stücke, Bitmasken zum Beispiel. Ndash rlb. usa Jan 26 10 at 19:08 Was du brauchst ist freopen (). Von der Manpage: Wenn filename ein Null-Zeiger ist, versucht die freopen () - Funktion, den Modus des Streams auf den durch den Modus angegebenen Modus zu ändern, als ob der Name der aktuell mit dem Stream verknüpften Datei verwendet worden wäre. In diesem Fall muss der mit dem Stream verbundene Dateideskriptor nicht geschlossen werden, wenn der Aufruf von freopen () erfolgreich ist. Es ist implementierungsdefiniert, welche Änderungen des Modus zulässig sind (falls vorhanden) und unter welchen Umständen. Grundsätzlich, das Beste, was Sie wirklich tun können, ist dies: Dies wird stdin wieder der gleiche Input-Stream, aber im Binär-Modus. Im normalen Modus wandelt das Lesen von stdin unter Windows rn (Windows newline) in das einzelne Zeichen ASCII um. Mit dem rb-Modus wird diese Konvertierung deaktiviert, so dass Sie in binären Daten korrekt lesen können. Freopen () gibt ein filehandle, aber seine den vorherigen Wert (bevor wir es in den binären Modus), also verwenden Sie es nicht für alles. Danach verwenden Sie fread (), wie bereits erwähnt wurde. Was jedoch Ihre Bedenken betrifft, dürfen Sie nicht in 32 Bits lesen, aber wenn Sie fread () verwenden, werden Sie in 4 chars lesen (das ist das beste, was Sie in C-char tun können, wird garantiert, dass mindestens 8 Bits Aber einige historische und embedded Plattformen haben 16 Bit char s (einige sogar 18 oder schlechter)). Wenn Sie fgets () verwenden, werden Sie nie in 4 Bytes lesen. Sie lesen in mindestens 3 (abhängig davon, ob es sich um Neuzeilen handelt), und das 4. Byte ist 0, weil C-Strings nul-terminiert sind und fgets () nul-terminiert, was es liest (wie eine gute Funktion). Offensichtlich ist dies nicht, was Sie wollen, also sollten Sie fread () verwenden. Beantwortet Oct 21 09 at 6:44 fgets () ist alles falsch hier. Sein Ziel auf menschlich lesbaren ASCII-Text durch End-of-line Zeichen, nicht binäre Daten beendet, und erhalten Sie nicht, was Sie brauchen. Ich habe vor kurzem genau das, was Sie wollen mit dem read () - Aufruf. Sofern Ihr Programm nicht explizit geschlossen hat, können Sie für das erste Argument (den Dateideskriptor) einen konstanten Wert von 0 für stdin verwenden. Oder wenn Sie auf einem POSIX-System (Linux, Mac OS X oder einer anderen modernen Unix-Variante) mit STDINFILENO arbeiten. Beantwortet Oct 21 09 at 6:20
No comments:
Post a Comment