2016-06-25 12 views
0

Wie kann ich die folgende Java-Zeile in C++ - Code umwandeln?Was entspricht das C++ Java-java.io.FileInputStream.read()?

FileInputStream fi = new FileInputStream(f); 
byte[] b = new byte[188]; 
int i = 0; 
while ((i = fi.read(b)) > -1)// This is the line that raises my question. 
{ 
// Code Block 
} 

Ich versuche, die folgende Codezeile laufen, aber es ist Ergebnis ein Fehler ist.

ifstream InputStream; 
unsigned char *byte = new unsigned char[188]; 
while(InputStream.get(byte) > -1) 
{ 
// Code Block 
} 
+1

[ 'std :: ifstream'] (http://en.cppreference.com/w/cpp/io/basic_ifstream) ... Es gibt eine [ lese] (http://en.cppreference.com/w/cpp/io/basic_istream/read) Methode geerbt von 'std :: istream ' – WhiZTiM

+0

java.io.FileInputStream.read() gibt int zurück, ifstreams read() doesn t. –

+0

'std :: isotream' hat' readsome', das die Anzahl der gelesenen Bytes zurückgibt – tkausl

Antwort

2

Sie können eine std::ifstream, verwenden und entweder get()>> einzelnen Zeichen eines nach dem anderen, oder Extraktion Bediener zu lesen, jede gegebene Art zu lesen, die im Klartext in dem Eingangsstrom sein würde, oder read() a zu lesen, fortlaufende Anzahl von Bytes.

Beachten Sie, dass im Gegensatz zu Java read() das C++ lesen den Stream zurückgibt. Wenn Sie die Anzahl der gelesenen Bytes wissen möchten, müssen Sie gcount() verwenden oder alternativ readsome() verwenden.

So könnte mögliche Lösung:

ifstream ifs (f); // assuming f is a filename 
char b[188]; 
int i = 0; 
while (ifs.read(b, sizeof(b))) // loop until there's nothing left to read 
{ 
    i = ifs.gcount(); // number of bytes read 
    // Code Block 
} 
+0

Ich bekomme diesen Fehler mit get(): 'Fehler: ungültige Konvertierung von 'unsigned char *' zu 'std :: basic_istream :: char_type {aka char}' [-fpermissive]' –

+0

@ LucasC.AlvesBittencourt sorry, ich dachte du wolltest einzelne Buchstaben lesen. Bitte sehen Sie meine Bearbeitung – Christophe

+0

Es sieht aus wie das mein Problem gelöst. Vielen Dank. –