Ho bisogno di leggere un file binario di grandi dimensioni (~ 1 GB) in un std::vector<double>
. Attualmente sto usando infile.read
per copiare l'intera cosa in un buffer char *
(mostrato sotto) e attualmente sto pianificando di convertire l'intera cosa in doubles
con reinterpret_cast
. sicuramente ci deve essere un modo per inserire lo doubles
direttamente nello vector
?come leggere efficientemente un file binario in un vettore C++
io non sono anche sicuro circa il formato del file binario, il dato è stato prodotto in python quindi è probabilmente tutto galleggia
ifstream infile(filename, std--ifstream--binary);
infile.seekg(0, infile.end); //N is the total number of doubles
N = infile.tellg();
infile.seekg(0, infile.beg);
char * buffer = new char[N];
infile.read(buffer, N);
C'è un motivo per cui si desidera utilizzare il doppio? I dati binari sono normalmente rappresentati come un carattere dato che, sulla maggior parte delle piattaforme, occupa un singolo byte. – Freddy
Se non conosci il formato del file come hai intenzione di convertirlo? –
Ummmmm .... vuoi leggere un file binario non conoscendo il formato come qualcosa di diverso da un flusso di byte? – luk32