이진 파일에서 매직 넘버를 가져오고 싶습니다. 예를 들어, JPG 파일은 첫 번째 바이트에 매직 넘버가 FFD8입니다. 어떻게 읽을 수 있습니까? 파일 확장자가 마법 번호에 응답하고 파일의 이름을 바꾸지 않는지 확인하는 프로그램을 작성하고 싶습니다.파일의 매직 넘버. C 프로그래밍
이것이 내가 생각해야 할 사항이지만 작동하지 않습니다. 항상 다른 값을 인쇄합니다. 파일이 JPG이고 FFD8이면 마법 번호를 알려주고 싶습니다.
int main()
{
FILE *f;
char fName[80];
char *array;
long fSize;
printf("Input file name\n");
scanf("%s", fName);
if((f=fopen(fName, "rb"))==NULL)
{
fprintf(stderr, "Error\n");
exit(1);
}
fseek (f , 0 , SEEK_END);
fSize = ftell (f);
rewind (f);
array=(char *)malloc(fSize+1);
fread(array, sizeof(char), 4, f);
printf("%x", array);
free(array);
}
정말로 전체 파일의 크기를 알아 내고 4 바이트 만 관리하고 복사 할 때 버퍼를 충분히 저장할 수있는 이유가 있습니까? 그렇다면 파일 시스템이 행복하게 * 단순한'fstat()'를 사용하여 * 파일 크기를 알려주는 것을 알고 있습니까? – EOF
처음 바이너리 파일을 사용하기 때문에 새로운 것을 시도하고 싶었습니다. 그러나, 그것에 대해 아무것도 찾을 수 없기 때문에 fstat()에 대해 더 자세히 알려주시겠습니까? – user3476022
글쎄,'fstat()'는 C 표준에 없지만 POSIX에서는 다른 OS 계열에있는 것이 거의 확실합니다. 'fstat()'를 사용하기 위해서는'struct stat x'를 생성 한 다음 파일 - desciptor/-name과'x'에'f-/l-/stat()'를 호출하십시오. 그러면'x.st_size'를 보게됩니다. – EOF