Perché ottengo uscita corrotto il mio file?
Domanda
Ho un semplice programma che ho compilato sia in MinGW e Visual C ++ 2008 Express, ed entrambi danno un file di output più grande di 88200. Quando ho impostato s = 0, entrambi i programmi funzionano come previsto. Che cosa sto facendo di sbagliato?
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int i;
short s;
fstream f;
f.open("test.raw", ios_base::out);
for(i = 0; i < 44100; i++)
{
s = i & 0xFFFF; // PROBLEM?
f.write(reinterpret_cast<const char *>(&s), sizeof(s));
}
f.close();
return 0;
}
Soluzione
Prova:
f.open("test.raw", ios_base::out | ios_base::binary);
Quando si scrive fuori char
s che accadono per abbinare il carattere di nuova riga \n
essi vengono convertiti nel standard di Windows sequenza di ritorno a capo \r\n
. Aprire il file in modalità binaria si ferma questa conversione dal corso di esecuzione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow