2014-01-17 5 views
1

fscanf를 사용하여 이진 파일 (이미지)을 구문 분석하려고합니다.fscanf를 사용하여 이진 파일을 구문 분석하는 방법

여기가 파일의 시작 부분입니다. 나는 파일의 '너비'와 '높이'를 원한다. 이 경우, 폭 640, 높이 480

00000000: 5036 0a23 2043 7265 6174 6564 2062 7920 P6.# Created by 
00000010: 4972 6661 6e56 6965 770a 3634 3020 3438 IrfanView.640 48 
00000020: 300a 3235 350a a079 35a0 7833 a179 349f 0.255..y5.x3.y4. 

그래서 헤더 '폭 뒤에 0xa는 (라인 피드) 다음 P'some 문자 공간 (0x20에) 다음과 높이이어서'

이다 내 코드에서

, 나는

t=fscanf(fin,"P%c\r%d %d",&fc,&w, &h); 
    or 
    t=fscanf(fin,"P%c\n%d %d",&fc,&w, &h); 

을하지만, t는 항상 1 (대신 3의) 반환하고 내 w 및 h는 읽을 수 없습니다.

내 문제를 어떻게 해결할 수 있습니까?

+0

'\ r'은 0x0a에 대해 틀릴 가능성이 높습니다. 대신 리터럴 상수를 사용하십시오. –

+8

'fscanf()'를 사용하여 텍스트 파일을 분석하는 것은 충분하지 않습니다. 광란은 당신이가는 길에 놓여 있다고 생각합니다. –

+0

감사합니다. 내 파일에서 0xa에 대해 fscanf()에 넣을 내용은 무엇입니까? – michael

답변

2

"# 만든 사람 ... \ n"이라는 텍스트를 건너 뛰어야합니다. 그래서 시도 :

t=fscanf(fin,"P%c\n%*[^\n] %d %d", &fc, &w, &h); 
+0

고마워요! 공장. – michael

2

당신은 단순히

char fc[26]; 
val=fscanf(fp,"%26c %d %d",fc,&w,&h); 

"26"정수 변수

의 폭과 높이를 저장 한 후가는 요리를 처음 26 개 문자를 읽고하여이를 달성 할 수있는 최대 수를 지정 폭을 현재 작업에서 읽을 문자의 개수입니다. 이렇게하면 처음 26자를 읽을 수 있고 너비와 높이를 읽는 데 많은 어려움을 덜 수 있습니다. 실제로 너가 원하는 것입니다.

"fc"를 문자열로 사용할 때주의하십시오. 끝에 "NULL"문자가 추가되지 않습니다. "fc"는 문자의 배열이며 NULL로 끝나지 않습니다.

관련 문제