Muss ich definieren „>>“ Operator verwenden cin Mit Int32 ist?
-
26-09-2019 - |
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 /
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.