2009-08-29 4 views
6

메모리의 char [] 버퍼에 jpeg 이미지가 있습니다. 디스크에 정확하게 기록해야합니다. 지금 내가 이걸하고있다C++ ofstream write() 메서드가 원시 데이터를 수정하는 이유는 무엇입니까?

그러나 이미지가 오른쪽으로 나오지 않으면 모든 곳에서 임의의 검은 색과 흰색 줄무늬가 왜곡되어 보입니다. 16 진수 뷰어에서 이미지를 원본과 비교 한 후, 개행 문자를 쓰고 있다고 생각하면 ofstream이 데이터를 수정하고 있음을 알았습니다. 0x0A가 원래 위치에있는 모든 위치에서 ofstream은 두 바이트 (0x0D0A)로 기록합니다. 나는 Ofstream이 LF 만 CRLF로 변환하려고한다고 가정해야만한다. 표준화 된 방식으로 이것을하지 않을 수 있는가?

당신이 파일을 열 때

답변

9

당신은 binary에 대한 파일 모드를 설정해야합니다 그것을 :

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

이 방법 스트림 아무튼 개행 문자를 기본 텍스트 형식으로 조정하려고하지 마십시오.

5

ofstream을 2 진수로 열어 봅니다. 이 같은 뭔가 작업을해야합니다 :

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

바이너리 모드로 파일을 열어되지 않기 때문에이, 그것은 기본적으로 형식화 된 출력으로 설정되어 있습니다. 형식화 된 출력에서 ​​구현은 사용자가 설명하는대로 줄 끝 문자의 변환을 수행합니다.

-2

내 버전에 아무 것도 쓰지 않기를 바랄뿐입니다 ... 디버깅 할 때 오류도없고 불만도없고 잘못된 것도 아니지만 파일을 만들지는 않습니다. fopen, fwrite 및 fclose에 무슨 문제가 있었는지 ... 나는 그 (것)들에 결코 문제가 없었습니다

관련 문제