2009-08-29 6 views
6

Mam obraz jpeg w buforze char [] w pamięci, wszystko, co muszę zrobić, to zapisać go na dysku dokładnie tak, jak jest. Teraz robię to, ale obraz nie wychodzi dobrze, wygląda nieczytelnie z przypadkowymi czarnymi i białymi paskami wszędzie. Po porównaniu obrazu z oryginałem w przeglądarce heksadecymalnej dowiedziałem się, że program outstream modyfikuje dane, gdy myśli, że piszę znak nowej linii. W dowolnym miejscu, w którym 0x0A pojawia się w oryginale, zapisuje on jako dwa bajty: 0x0D0A. Muszę założyć, że ofstream zamierza przekonwertować z LF tylko na CRLF, czy istnieje standardowy sposób, aby tego nie zrobić?Dlaczego metoda C++ ofstream write() modyfikuje moje surowe dane?

Odpowiedz

9

należy ustawić tryb pliku na binary gdy jesteś opening go:

std::ofstream file; 
file.open("filename.jpg", std::ios_base::out | std::ios_base::binary); 

ten sposób nie robi strumień nie próbuj dopasować nowych linii do twojego natywnego formatu tekstu.

5

Spróbuj otworzyć strumień jako binarny. Coś jak to powinno działać:

ofstream ofs; 
ofs.open(filename, ios::out | ios::binary); 
ofs.write(buffer, bufferLen); 
ofs.close(); 
1

Ponieważ nie są otwarcie pliku w trybie binarnym, jest on ustawiony domyślnie sformatowany wyjście. W sformatowanym wyniku implementacja wykonuje konwersję znaków końca wiersza, zgodnie z opisem.

-2

Żałuję, że nie mogę uzyskać mojej wersji, aby napisać cokolwiek ... bez błędów, skarg, niczego złego podczas debugowania, ale nawet nie próbuje utworzyć pliku. Co do cholery było nie tak z fopen, fwrite i fclose ... Nigdy nie miałem z nimi problemu

Powiązane problemy