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
Ustaw tryb binarny po otwarciu pliku:
http://www.cplusplus.com/reference/iostream/ofstream/ofstream/
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.
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();
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.
Ż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
- 1. błąd ofstream w C++
- 2. Dlaczego `istnieje` modyfikuje moją stałą?
- 3. C# NetworkStream write() i read()
- 4. Fortran splata moje dane wyjściowe z gwiazdkami - dlaczego?
- 5. Read write mutex w C++
- 6. Perl6: Jak odczytać surowe dane STDIN?
- 7. C++ ifstream, ofstream: Jaka jest różnica między surowymi wywołaniami read()/write() a otwieranymi plikami w trybie binarnym?
- 8. Dlaczego C drukuje moje wartości szesnastkowe niepoprawnie?
- 9. C++ wyrównanie - surowe i słaby
- 10. Dlaczego metoda dekorowana ClassInitialize powoduje, że wszystkie moje testy zawodzą?
- 11. Dlaczego tak długo Meteor ładuje moje dane na Heroku?
- 12. Wskaźniki, arytmetyka wskaźnikowa i dane surowe w Swift
- 13. ofstream nie wylewać
- 14. zawartość do ofstream
- 15. Panda's Write CSV - Append vs. Write
- 16. Dlaczego moje zapytanie Aslinowane PLINQ jest szybsze niż moje nieuporządkowane?
- 17. Jak idiomatycznie/wydajnie potokować dane z Read + Seek to Write?
- 18. Błąd std :: ofstream podczas zapisywania danych
- 19. Zdobądź surowe dane Magstripe z czytnikiem audio jack
- 20. Dlaczego moje obiekty nie umierają?
- 21. jslint: dlaczego ten kod powoduje komunikat o błędzie "Surowe naruszenie"?
- 22. Wyczyść moje własne dane aplikacji programowo
- 23. Serial: write() throttling?
- 24. Dlaczego moje testy funkcjonalne zawodzą?
- 25. Dlaczego Grails usuwa moje wyjątki?
- 26. Dlaczego moje całkowite RPC rośnie?
- 27. dlaczego mapa js w tablicy modyfikuje oryginalną tablicę?
- 28. Zrozumienie listy Pythona 3.5 modyfikuje oryginał
- 29. Metoda Arduino map() - dlaczego?
- 30. Dlaczego moje zadanie resque znalezienia obiektu?
Dzięki, wiedziałem, że to musi być coś prostego –