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 /

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top