mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monday, November 13, 2006

C언어] 이진파일 쓰기/바이너리 파일 만들기 예제; Make, Write Binary File


out.bin 이라는 이진파일을 만들어서, 그 안에 이진 데이터를 쓰는 방법입니다. out.bin 이라는 파일이 현재 디렉토리에 이미 있다면 덮어쓰게 됩니다.


이진파일 저장 / Binary 로 저장 예제


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

int main(void) {

  FILE *out;

  // 새로 만들 이진파일의 내용을 바이트 배열로 표현
  unsigned char array[] = { 0x02, 0x74, 0x21, 0x6A, 0x02, 0x6A, 0xFF, 0x53, 0xE8, 0x8F, 0x0E, 0x00, 0x00, 0x83, 0xC4, 0xFF };


  // 이진파일 쓰기용으로 열기, 없다면 새로 만들고
  if ( (out = fopen("out.bin", "wb")) == NULL ) {
    fputs("파일 열기 에러!", stderr);
    exit(1);
  }


  // 이진 파일에, array[] 배열의 요소를 하나씩 쓰기
  for (int i = 0; i < ( sizeof(array) / sizeof(array[0]) ); i++) {
    if (fputc(array[i], out) == EOF) {
      fputs("파일 쓰기 에러!", stderr);
      exit(2);
    }
  }

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


if ( (out = fopen("out.bin", "wb")) == NULL ) {...
에서 "wb" 의

"w" 는 "쓰기 모드"

"b" 는 이진파일 모드를 의미합니다. 즉, 쓰기 모드로 이진파일을 열라는 뜻인데, "out.bin" 파일이 없다면 새로 만들고, 이미 있다면 덮어씁니다.


sizeof(array) / sizeof(array[0])
이것은 배열 요소의 개수를 구하는 것입니다. 이렇게 구하지 않고, 상수로서 직접 배열 요소 개수를 지정해 주어도 됩니다.


if (fputc(array[i], out) == EOF) {...
fputc() 함수로 파일에 1바이트씩 데이터를 저장합니다.
파일을 쓰다가 에러가 나면 강제 종료합니다.



위의 예제를 실행하면, 현재 디렉토리에 out.bin 이라는 파일명의 16바이트짜리 이진파일이 생길 것입니다.

그 파일을 메모장으로 보면 이상한 문자들이 적혀 있을 것이고,

헥사 뷰어로 보면 다음과 같을 것입니다:
00000000:  02 74 21 6A 02 6A FF 53  E8 8F 0E 00 00 83 C4 FF  .t!j.j.S........




▶▶ C언어] 이진파일 읽기; 바이너리 파일 읽기전용으로 열기; Open, Read Binary File




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top