Desidero leggere i byte non firmati da un file binario. Così ho scritto il seguente codice.C++ lettura di caratteri non firmati dal flusso di file
#include <iostream>
#include <fstream>
#include <vector>
#include <istream>
std::string filename("file");
size_t bytesAvailable = 128;
size_t toRead = 128;
std::basic_ifstream<unsigned char> inf(filename.c_str(), std::ios_base::in | std::ios_base::binary) ;
if (inF.good())
{
std::vector<unsigned char> mDataBuffer;
mDataBuffer.resize(bytesAvailable) ;
inF.read(&mDataBuffer[0], toRead) ;
size_t counted = inF.gcount() ;
}
Questo risulta in lettura sempre a 0 byte come mostrato dalla variabile conteggiata.
Sembra che ci siano riferimenti sul web che dicono che ho bisogno di impostare le impostazioni locali per farlo funzionare. Come farlo esattamente non è chiaro per me.
Lo stesso codice funziona utilizzando il tipo di dati 'char' invece di 'unsigned char'
Il codice di cui sopra usando unsigned char sembra funzionare su Windows, ma fallisce in esecuzione in un coLinux Fedora 2.6.22.18.
Cosa devo fare per farlo funzionare per Linux?
Non una risposta alla domanda, ma correlati.Ricorda che la definizione della classe string in C++ è 'typedef basic_string string;', quindi puoi sempre creare una classe di stringa di char unsigned a 'typedef basic_string bytestring;'. –
true, ma voglio leggere un file BINARY – David
.read() e .write() possono essere utilizzati per binario/testo, gli operatori di streaming << and >> sono solo per file di testo. Tutti i dati su un computer sono in ultima analisi binari, è come si sceglie di interpretarlo. – sfossen