전산학도 이야기


exe 나 jpg / gif 같은 이진파일은 텍스트 파일과는 다른 방식으로 처리해야 합니다. 왜냐하면 이진파일에는, 텍스트 파일에는 없는 0x00 등의 문자들이 들어 있기 때문입니다.

또한 예를 들어, 0x0A 라는 바이트를 텍스트 모드로 읽으면 "줄바꿈 문자"라는 특수한 의미로 인식되지만, 이진파일 모드에서는 어떠한 의미도 없습니다. 그냥 평범한 데이터일 뿐입니다.


이진파일 열어서 읽기 예제


파일명: 0.cpp
#include <stdio.h>
#include <stdlib.h> // exit()

int main(void) {

  FILE *in;
  int ch;


  // test.bin 이라는 이진파일을 읽기 전용으로 열기
  if ( (in = fopen("test.bin", "rb")) == NULL ) {
    fputs("파일 열기 에러!", stderr);
    exit(1);
  }


  // 이진 파일, 1바이트씩 읽어, 헥사로 출력
  while ( (ch = fgetc(in)) != EOF ) {
    printf("%02X ", ch);
  }


  fclose(in); // 파일 닫기
  return 0;
}


fopen("test.bin", "rb") 로, 이진파일을 열 수 있습니다.

* "r" 은 읽기전용으로 열라는 뜻

* "b" 는 이진파일입니다. 따라서 "test.bin" 이라는 파일명의 이진파일을 읽기전용으로 열라는 뜻입니다.

fopen 함수가 파일 열기에 실패하면, NULL 을 반환합니다. 위의 경우 "test.bin" 이라는 파일이 없다면 NULL 을 반환합니다.



fgetc() 는 파일에서 1바이트를 읽어서 char 가 아닌 int 로 반환합니다. 에러가 나거나, 파일의 끝에 도달할 경우 EOF 를 반환합니다.


while ( (ch = fgetc(in)) != EOF )

이것은 fgetc() 함수로 1바이트씩 파일 끝까지 계속 읽으라는 뜻입니다. 즉 EOF 가 아닌 동안 루프를 계속 돌리라는 뜻입니다. "!=" 은 "==" 의 반대입니다.



printf("%02X ", ch);

이것은 fgetc() 함수가 읽은 바이트를 16진수로 변환하여 화면에 출력하라는 뜻.



출처 : http://mwultong.blogspot.com/2006/11/c-open-read-binary-file.html

'프로그래밍' 카테고리의 다른 글

[QBASIC]XP속에 숨겨진 마소의 오래된 컴파일러...  (0) 2011.07.23
[Unix C]NCURSES란 ?  (0) 2009.10.05
Posted by 위디안