Frage

Ich brauche genau 32 Bits aus einer Datei zu lesen. Ich verwende ifstream in der STL. Kann ich nur sagen, direkt an:

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ifstream::in);
if (my_stream && !my_stream.eof())
   my_stream >> my_int;

... oder muss ich irgendwie mit int32 den Operator >> zur Arbeit außer Kraft zu setzen? Ich sehe die int32 hier nicht aufgeführt sind: http://www.cplusplus.com/reference/iostream/istream / Operator% 3E% 3E /

War es hilfreich?

Lösung

Der Strom-Operator (>>) führt formatiert IO, nicht binärer IO. Sie werden std::istream::read stattdessen verwenden müssen. Sie werden auch die Datei als binary öffnen müssen. Oh, und std::istream::eof Überprüfung ist redundant in Ihrem Code.

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ios::in | std::ios::binary);
if (my_stream)
{
    my_stream.read(reinterpret_cast<char*>(&my_int), sizeof(my_int));
}
//Be sure to check my_stream to see if the read succeeded.

Beachten Sie, dass dies zu tun wird Plattform Abhängigkeit von Ihrem Code einzuführen, da die Reihenfolge der Bytes in einer ganzen Zahl auf verschiedenen Plattformen verschieden ist.

Andere Tipps

int32 wird ein typedef für was auch immer Art geschieht auf Ihrer Plattform eine 32-Bit-Ganzzahl mit Vorzeichen zu sein. Diese Art zugrunde liegen wird sicherlich operator>> für sie überlastet haben.

Aktualisieren

Wie Billy unten erwähnt, sind Ströme ausgelegt Text lesen und in den überlasteten Datentyp zu analysieren. Also in Ihrem Codebeispiel, wird es für eine Folge von numerischen Zeichen suchen. Deshalb wird es nicht mehr als 32 Bits aus der Datei lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top