문제

파일의 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 파일에서 바이트 읽기 .

문제가 해결되는 모드에있는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top