2012-04-19 3 views
3

c/C++에서 간단한 텍스트 파일이 아닌 파일의 내용을 어떻게 읽을 수 있습니까? 예를 들어, .jpg/.png/.bmp와 같은 이미지 파일을 읽고 특정 색인의 값을보고 어떤 색인지 확인하려고합니다. 또는 .exe/.rar/.zip 파일이 있고 다른 인덱스에 어떤 값이 저장되어 있는지 알고 싶습니까? 그럴 게요 작동, 난 "의 image.png"와 "example.txt"를 교체하거나 그렇다면 내가 알고 싶은".txt"파일 이외의 파일 내용 읽기

FILE *fp; 

fp = fopen("example.txt","r"); /* open for reading */ 

char c; 

c = getc(fp) ; 

인 C 스타일 파일을 읽는 알고있다 ? 올바른 데이터를 얻을 수 있습니까?

+3

* 읽기 * 어떤 유형의 파일도 다릅니다. 오직 * 통역 * 당신이 읽은 것은 그 차이입니다. –

+0

+1 좋은 질문 ......... !! –

+0

감사합니다. @Als. –

답변

2

파일을 이진 모드로 열어야합니다. 이를 통해 바이트를 파일에서 변경되지 않은 "원시"모드로 읽을 수 있습니다.

그러나 특정 픽셀의 색상 등을 결정하려면 파일의 바이트 의미와 읽을 파일에 대한 정렬 방법을 완전히 이해해야합니다. 이 두 번째 요구 사항은 훨씬 더 어렵습니다. 이를 위해서는 해당 파일 형식의 형식에 대해 조사해야합니다.

+0

고맙습니다 .bmp는 압축되지 않은 파일이므로 픽셀 색상 데이터가 순차적으로 정렬됩니다. 사실입니까? –

+1

@someone_smiley .bmp가 압축되지 않은 상태에서도 여전히 형식이 있습니다. Wikipedia에는 ​​주제에 대한 몇 가지 [info] (http://en.wikipedia.org/wiki/BMP_file_format)가 있습니다. –

8

가 아닌 텍스트 파일을 열 때, 당신은 바이너리 (번역되지 않은) 모드를 지정할 수 있습니다 : 일반적인 경우

FILE *fp = fopen("example.png", "rb"); 

을, 당신은 구조체를 정의하여 바이너리 파일에서 당신의 독서의 대부분을 그 파일에서 구조를 미러링 한 다음 파일에서 구조체로 읽을 때 fread을 사용합니다 (하지만 구조체의 패딩과 같은 것이 메모리 내 표시와 온 스크린 표시 사이에 다르지 않도록주의해야합니다. 디스크).

+0

감사합니다. :). 그래서 "rb"모드는 다른 모든 확장자를 열어야하는데 데이터 형식에주의해야합니다. u는 "파일에서 구조를 미러링하는 구조체 정의"에 대해 더 자세히 설명 할 수 있다면 감사하겠습니다. "구조체 미러링"이라는 용어를 이해하지 못합니다. –

1

물론 그 밖에도 c에서 binary mode에있는 파일을 열 수 있습니다. 당신이 관심이 있다면 당신은 또한 그러한 비 텍스트 파일의 일부 첫 번째 바이트를 읽을 수 있습니다.

대부분의 경우 서로 다른 모든 파일 형식에는 고정 헤더가 있으므로 해당 파일 형식을 식별 할 수 있습니다.

열기 어떤 MATROSKA이 (.mkv) 파일 1 4 바이트를 읽어 당신은 항상있을 것이다 당신은 또한 hexdump 유틸리티 리눅스 바이너리 표현으로 모든 파일을 볼 수 있습니다

0x1A 0x45 0xDF 0xA3 

==== ================ 편집 : 여기

such as .jpg/.png/.bmp and see the value at certain index,to 
check what colour it is? 

당신은 형식 O를 이해할 필요가 f 파일을 기반으로 어떤 정보가 어떤 정보를 나타내는 지 알 수 있습니다. !!!

+0

감사합니다. –