문제
파일의 3 바이트를 읽는 매우 간단한 프로그램이 있습니다.
int main(void) { FILE *fd = NULL; int i; unsigned char test = 0; fd = fopen("test.bmp", "r"); printf("position: %ld\n", ftell(fd)); for (i=0; i<3; i++) { fread(&test, sizeof (unsigned char), 1, fd); printf("position: %ld char:%X\n", ftell(fd), test); } return (0); }.
텍스트 파일로 시도 할 때
position: 0 position: 1 char: 61 position: 2 char: 62 position: 3 char: 63.
하지만 PNG로 실행할 때 i :
position: 0 position: 147 char:89 position: 148 char:50 position: 149 char:4E.
파일의 3 바이트는 실제로 89 50 4E이지만 147이 어디에서 오는지 모르겠습니다. BMP 파일을 사용하면 다음과 같습니다.
position: 0 position: -1 char:42 position: 0 char:4D position: 1 char:76.
이 첫 번째 위치가 어디에서 왔는지 아십니까? 당신의 도움을 위해 많은 감사합니다
해결책
이진 모드에서 파일을 열어야합니다.
fd = fopen("test.bmp", "rb");
.
텍스트 모드에서 비트 맵과 같은 바이너리 파일을 읽으려고하면 캐리지 리턴 및 줄 바꿈에 해당하는 바이트가 사물을 혼동합니다.
다른 팁
이 질문을 봅니다. bmp 파일에서 바이트 읽기 .
문제가 해결되는 모드에있는 것 같습니다.
제휴하지 않습니다 StackOverflow