Ho bisogno di definire “>>” all'operatore di utilizzare cin con Int32 di?
-
26-09-2019 - |
Domanda
Ho bisogno di leggere esattamente 32 bit da un file. Sto utilizzando ifstream nel STL. Posso solo dire direttamente:
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;
... o ho bisogno di ignorare qualche modo l'operatore >> al lavoro con int32? Non vedo l'int32 elencati qui: http://www.cplusplus.com/reference/iostream/istream / operatore% 3E% 3E /
Soluzione
L'operatore di estrazione flusso (>>
) esegue formattato IO, non binario IO. Avrete bisogno di usare std::istream::read
invece. Avrete anche bisogno di aprire il file come binary
. Oh, e controllando std::istream::eof
è ridondante nel codice.
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.
Si noti che questa operazione sta per introdurre la dipendenza piattaforma sul vostro codice, perché l'ordine dei byte in un intero è diverso su diverse piattaforme.
Altri suggerimenti
int32
sarà un typedef
per qualunque tipo sembra essere un numero intero con segno a 32 bit sulla vostra piattaforma. Questo tipo di fondo avrà certamente operator>>
sovraccaricato per esso.
Aggiorna
Come Billy ha sottolineato di seguito, i flussi sono stati progettati per leggere il testo e analizzarlo nel tipo di dati sovraccarico. Quindi nel tuo esempio di codice, che sarà alla ricerca di una sequenza di caratteri numerici. Pertanto, non leggerà 32 bit dal file.